summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--AUTHORS.md1
-rw-r--r--DONORS.md34
-rw-r--r--core/bind/core_bind.cpp14
-rw-r--r--core/bind/core_bind.h2
-rw-r--r--core/object.cpp16
-rw-r--r--doc/classes/ArrayMesh.xml2
-rw-r--r--doc/classes/BaseButton.xml1
-rw-r--r--doc/classes/CPUParticles.xml3
-rw-r--r--doc/classes/CPUParticles2D.xml3
-rw-r--r--doc/classes/CollisionObject2D.xml2
-rw-r--r--doc/classes/ColorPickerButton.xml2
-rw-r--r--doc/classes/ConfigFile.xml1
-rw-r--r--doc/classes/Crypto.xml1
-rw-r--r--doc/classes/CryptoKey.xml1
-rw-r--r--doc/classes/Engine.xml16
-rw-r--r--doc/classes/Geometry.xml2
-rw-r--r--doc/classes/GeometryInstance.xml2
-rw-r--r--doc/classes/HashingContext.xml1
-rw-r--r--doc/classes/Image.xml17
-rw-r--r--doc/classes/KinematicBody.xml8
-rw-r--r--doc/classes/KinematicBody2D.xml10
-rw-r--r--doc/classes/Light.xml18
-rw-r--r--doc/classes/LineEdit.xml14
-rw-r--r--doc/classes/MainLoop.xml1
-rw-r--r--doc/classes/MenuButton.xml3
-rw-r--r--doc/classes/Mesh.xml25
-rw-r--r--doc/classes/MeshInstance.xml1
-rw-r--r--doc/classes/MeshInstance2D.xml1
-rw-r--r--doc/classes/MultiMeshInstance.xml1
-rw-r--r--doc/classes/MultiMeshInstance2D.xml1
-rw-r--r--doc/classes/NinePatchRect.xml2
-rw-r--r--doc/classes/OS.xml3
-rw-r--r--doc/classes/OmniLight.xml2
-rw-r--r--doc/classes/ParticlesMaterial.xml3
-rw-r--r--doc/classes/PoolByteArray.xml5
-rw-r--r--doc/classes/ProjectSettings.xml3
-rw-r--r--doc/classes/ShaderMaterial.xml2
-rw-r--r--doc/classes/SpriteFrames.xml1
-rw-r--r--doc/classes/StreamPeerSSL.xml1
-rw-r--r--doc/classes/StyleBox.xml8
-rw-r--r--doc/classes/Texture3D.xml2
-rw-r--r--doc/classes/Thread.xml3
-rw-r--r--doc/classes/VideoPlayer.xml8
-rw-r--r--doc/classes/VisualInstance.xml9
-rw-r--r--doc/classes/X509Certificate.xml1
-rw-r--r--doc/classes/bool.xml33
-rwxr-xr-xdoc/tools/makerst.py29
-rw-r--r--drivers/gles2/rasterizer_scene_gles2.cpp6
-rw-r--r--drivers/gles2/rasterizer_storage_gles2.cpp29
-rw-r--r--drivers/gles2/shader_compiler_gles2.cpp19
-rw-r--r--drivers/gles2/shaders/scene.glsl26
-rw-r--r--drivers/gles3/rasterizer_canvas_gles3.cpp2
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.cpp10
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.cpp16
-rw-r--r--drivers/gles3/shaders/cubemap_filter.glsl2
-rw-r--r--editor/code_editor.cpp2
-rw-r--r--editor/connections_dialog.cpp47
-rw-r--r--editor/connections_dialog.h2
-rw-r--r--editor/editor_audio_buses.cpp6
-rw-r--r--editor/editor_help.cpp149
-rw-r--r--editor/editor_node.cpp48
-rw-r--r--editor/editor_node.h2
-rw-r--r--editor/editor_properties.cpp13
-rw-r--r--editor/editor_properties.h4
-rw-r--r--editor/editor_resource_preview.cpp2
-rw-r--r--editor/filesystem_dock.cpp1
-rw-r--r--editor/icons/icon_audio_stream_o_g_g_vorbis.svg1
-rw-r--r--editor/icons/icon_crosshair.svg1
-rw-r--r--editor/import/editor_scene_importer_gltf.cpp4
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.cpp2
-rw-r--r--editor/plugins/animation_player_editor_plugin.cpp2
-rw-r--r--editor/plugins/asset_library_editor_plugin.cpp4
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp45
-rw-r--r--editor/plugins/item_list_editor_plugin.cpp2
-rw-r--r--editor/plugins/polygon_2d_editor_plugin.cpp11
-rw-r--r--editor/plugins/script_text_editor.cpp14
-rw-r--r--editor/plugins/shader_editor_plugin.cpp2
-rw-r--r--editor/plugins/spatial_editor_plugin.cpp33
-rw-r--r--editor/plugins/spatial_editor_plugin.h1
-rw-r--r--editor/plugins/texture_region_editor_plugin.cpp10
-rw-r--r--editor/project_manager.cpp1
-rw-r--r--editor/translations/af.po63
-rw-r--r--editor/translations/ar.po87
-rw-r--r--editor/translations/bg.po54
-rw-r--r--editor/translations/bn.po67
-rw-r--r--editor/translations/ca.po65
-rw-r--r--editor/translations/cs.po65
-rw-r--r--editor/translations/da.po75
-rw-r--r--editor/translations/de.po98
-rw-r--r--editor/translations/de_CH.po39
-rw-r--r--editor/translations/editor.pot30
-rw-r--r--editor/translations/el.po65
-rw-r--r--editor/translations/eo.po35
-rw-r--r--editor/translations/es.po106
-rw-r--r--editor/translations/es_AR.po99
-rw-r--r--editor/translations/et.po31
-rw-r--r--editor/translations/eu.po30
-rw-r--r--editor/translations/fa.po55
-rw-r--r--editor/translations/fi.po98
-rw-r--r--editor/translations/fil.po31
-rw-r--r--editor/translations/fr.po94
-rw-r--r--editor/translations/ga.po34
-rw-r--r--editor/translations/he.po60
-rw-r--r--editor/translations/hi.po42
-rw-r--r--editor/translations/hr.po35
-rw-r--r--editor/translations/hu.po66
-rw-r--r--editor/translations/id.po65
-rw-r--r--editor/translations/is.po30
-rw-r--r--editor/translations/it.po65
-rw-r--r--editor/translations/ja.po82
-rw-r--r--editor/translations/ka.po41
-rw-r--r--editor/translations/ko.po102
-rw-r--r--editor/translations/lt.po42
-rw-r--r--editor/translations/lv.po44
-rw-r--r--editor/translations/mi.po30
-rw-r--r--editor/translations/ml.po31
-rw-r--r--editor/translations/mr.po31
-rw-r--r--editor/translations/ms.po30
-rw-r--r--editor/translations/nb.po67
-rw-r--r--editor/translations/nl.po65
-rw-r--r--editor/translations/or.po30
-rw-r--r--editor/translations/pl.po98
-rw-r--r--editor/translations/pr.po45
-rw-r--r--editor/translations/pt_BR.po145
-rw-r--r--editor/translations/pt_PT.po114
-rw-r--r--editor/translations/ro.po66
-rw-r--r--editor/translations/ru.po583
-rw-r--r--editor/translations/si.po30
-rw-r--r--editor/translations/sk.po51
-rw-r--r--editor/translations/sl.po64
-rw-r--r--editor/translations/sq.po62
-rw-r--r--editor/translations/sr_Cyrl.po66
-rw-r--r--editor/translations/sr_Latn.po31
-rw-r--r--editor/translations/sv.po66
-rw-r--r--editor/translations/ta.po30
-rw-r--r--editor/translations/te.po30
-rw-r--r--editor/translations/th.po63
-rw-r--r--editor/translations/tr.po65
-rw-r--r--editor/translations/uk.po100
-rw-r--r--editor/translations/ur_PK.po39
-rw-r--r--editor/translations/vi.po56
-rw-r--r--editor/translations/zh_CN.po98
-rw-r--r--editor/translations/zh_HK.po56
-rw-r--r--editor/translations/zh_TW.po65
-rw-r--r--main/main.cpp13
-rw-r--r--modules/assimp/import_utils.h2
-rw-r--r--modules/enet/networked_multiplayer_enet.cpp20
-rw-r--r--modules/gdscript/gdscript.cpp53
-rw-r--r--modules/gdscript/gdscript.h8
-rw-r--r--modules/gdscript/gdscript_compiler.cpp12
-rw-r--r--modules/gdscript/gdscript_editor.cpp22
-rw-r--r--modules/gdscript/gdscript_function.cpp14
-rw-r--r--modules/gdscript/gdscript_function.h22
-rw-r--r--modules/gdscript/gdscript_parser.cpp65
-rw-r--r--modules/gdscript/language_server/gdscript_extend_parser.cpp13
-rw-r--r--modules/gdscript/language_server/gdscript_language_protocol.cpp3
-rw-r--r--modules/gdscript/language_server/gdscript_language_protocol.h2
-rw-r--r--modules/gdscript/language_server/gdscript_language_server.cpp2
-rw-r--r--modules/gridmap/grid_map.cpp2
-rw-r--r--modules/mono/csharp_script.cpp183
-rw-r--r--modules/mono/csharp_script.h8
-rw-r--r--modules/mono/glue/base_object_glue.cpp1
-rw-r--r--modules/mono/mono_gd/gd_mono_assembly.cpp6
-rw-r--r--modules/mono/mono_gd/gd_mono_internals.cpp4
-rw-r--r--modules/mono/mono_gd/gd_mono_utils.cpp36
-rw-r--r--modules/mono/mono_gd/gd_mono_utils.h23
-rw-r--r--modules/squish/image_compress_squish.cpp2
-rw-r--r--modules/squish/image_compress_squish.h2
-rw-r--r--modules/squish/register_types.cpp2
-rw-r--r--modules/visual_script/visual_script_editor.cpp4
-rw-r--r--modules/websocket/doc_classes/WebSocketClient.xml4
-rw-r--r--modules/websocket/doc_classes/WebSocketServer.xml5
-rw-r--r--modules/websocket/websocket_server.cpp15
-rw-r--r--modules/websocket/websocket_server.h5
-rw-r--r--modules/websocket/wsl_server.cpp2
-rw-r--r--platform/android/export/export.cpp148
-rw-r--r--platform/android/java/app/AndroidManifest.xml2
-rw-r--r--platform/android/java/lib/AndroidManifest.xml2
-rw-r--r--platform/android/java/lib/res/drawable-nodpi/icon.pngbin7569 -> 0 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-anydpi-v26/icon.xml5
-rw-r--r--platform/android/java/lib/res/mipmap-hdpi/icon.pngbin0 -> 3762 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-hdpi/icon_background.pngbin0 -> 375 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-hdpi/icon_foreground.pngbin0 -> 2998 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-mdpi/icon.pngbin0 -> 2672 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-mdpi/icon_background.pngbin0 -> 240 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-mdpi/icon_foreground.pngbin0 -> 1909 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xhdpi/icon.pngbin0 -> 5186 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xhdpi/icon_background.pngbin0 -> 517 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.pngbin0 -> 4490 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xxhdpi/icon.pngbin0 -> 8154 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xxhdpi/icon_background.pngbin0 -> 905 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.pngbin0 -> 7415 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xxxhdpi/icon.pngbin0 -> 11749 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.pngbin0 -> 1360 bytes
-rw-r--r--platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.pngbin0 -> 11325 bytes
-rw-r--r--platform/android/java/lib/res/mipmap/icon.pngbin0 -> 11749 bytes
-rw-r--r--platform/android/java/lib/res/mipmap/icon_background.pngbin0 -> 240 bytes
-rw-r--r--platform/android/java/lib/res/mipmap/icon_foreground.pngbin0 -> 1909 bytes
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotLib.java2
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java2
-rw-r--r--platform/android/java_godot_lib_jni.cpp2
-rw-r--r--platform/android/java_godot_lib_jni.h2
-rw-r--r--platform/haiku/detect.py2
-rw-r--r--platform/iphone/os_iphone.cpp24
-rw-r--r--platform/javascript/export/export.cpp18
-rw-r--r--platform/javascript/os_javascript.cpp71
-rw-r--r--platform/javascript/os_javascript.h2
-rw-r--r--platform/osx/os_osx.h2
-rw-r--r--platform/osx/os_osx.mm6
-rw-r--r--platform/server/detect.py2
-rw-r--r--platform/server/os_server.h1
-rw-r--r--platform/windows/context_gl_windows.cpp8
-rw-r--r--platform/windows/context_gl_windows.h2
-rw-r--r--platform/windows/joypad_windows.cpp5
-rwxr-xr-xplatform/windows/os_windows.cpp5
-rw-r--r--platform/x11/detect.py14
-rw-r--r--platform/x11/pck_embed.ld4
-rw-r--r--platform/x11/pck_embed.legacy.ld10
-rw-r--r--scene/2d/cpu_particles_2d.cpp6
-rw-r--r--scene/2d/cpu_particles_2d.h1
-rw-r--r--scene/2d/light_2d.cpp4
-rw-r--r--scene/2d/node_2d.cpp1
-rw-r--r--scene/2d/physics_body_2d.cpp6
-rw-r--r--scene/3d/cpu_particles.cpp6
-rw-r--r--scene/3d/cpu_particles.h1
-rw-r--r--scene/3d/physics_body.cpp4
-rw-r--r--scene/animation/skeleton_ik.cpp2
-rw-r--r--scene/gui/center_container.cpp6
-rw-r--r--scene/gui/control.cpp5
-rw-r--r--scene/gui/graph_edit.cpp18
-rw-r--r--scene/gui/item_list.cpp2
-rw-r--r--scene/gui/line_edit.cpp11
-rw-r--r--scene/gui/scroll_container.cpp38
-rw-r--r--scene/main/scene_tree.cpp3
-rw-r--r--scene/resources/dynamic_font.cpp2
-rw-r--r--scene/resources/particles_material.cpp13
-rw-r--r--scene/resources/particles_material.h1
-rw-r--r--servers/physics/area_sw.cpp3
-rw-r--r--servers/physics_2d/area_2d_sw.cpp3
-rw-r--r--servers/visual/shader_language.cpp60
-rw-r--r--servers/visual/visual_server_wrap_mt.h2
-rw-r--r--servers/visual_server.h2
-rw-r--r--thirdparty/README.md2
-rw-r--r--thirdparty/libwebp/src/dec/frame_dec.c2
-rw-r--r--thirdparty/libwebp/src/dec/idec_dec.c11
-rw-r--r--thirdparty/libwebp/src/dec/vp8i_dec.h4
-rw-r--r--thirdparty/libwebp/src/dec/vp8l_dec.c10
-rw-r--r--thirdparty/libwebp/src/dec/vp8li_dec.h20
-rw-r--r--thirdparty/libwebp/src/demux/demux.c4
-rw-r--r--thirdparty/libwebp/src/dsp/dec_neon.c9
-rw-r--r--thirdparty/libwebp/src/dsp/dsp.h4
-rw-r--r--thirdparty/libwebp/src/dsp/lossless.c11
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_common.h2
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_enc_sse2.c3
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_sse2.c3
-rw-r--r--thirdparty/libwebp/src/dsp/upsampling_msa.c4
-rw-r--r--thirdparty/libwebp/src/dsp/upsampling_neon.c14
-rw-r--r--thirdparty/libwebp/src/enc/histogram_enc.c2
-rw-r--r--thirdparty/libwebp/src/enc/picture_csp_enc.c18
-rw-r--r--thirdparty/libwebp/src/enc/vp8i_enc.h6
-rw-r--r--thirdparty/libwebp/src/mux/muxi.h4
-rw-r--r--thirdparty/libwebp/src/mux/muxread.c2
-rw-r--r--thirdparty/libwebp/src/utils/color_cache_utils.h2
-rw-r--r--thirdparty/libwebp/src/utils/thread_utils.c2
-rw-r--r--thirdparty/libwebp/src/utils/utils.c9
-rw-r--r--thirdparty/libwebp/src/webp/decode.h5
-rw-r--r--thirdparty/libwebp/src/webp/encode.h9
-rw-r--r--thirdparty/libwebp/src/webp/mux.h12
-rw-r--r--thirdparty/libwebp/src/webp/mux_types.h10
-rw-r--r--thirdparty/libwebp/src/webp/types.h18
-rw-r--r--version.py2
272 files changed, 3949 insertions, 2493 deletions
diff --git a/.travis.yml b/.travis.yml
index 7350849d6a..c8b123c79c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -94,7 +94,7 @@ matrix:
- name: Linux export template (release_debug, GCC 5, without 3D support)
stage: build
- env: PLATFORM=x11 TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-gcc-5 EXTRA_ARGS="disable_3d=yes"
+ env: PLATFORM=x11 TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-gcc-5 EXTRA_ARGS="CXXFLAGS=-fno-strict-aliasing disable_3d=yes"
os: linux
compiler: gcc
addons:
diff --git a/AUTHORS.md b/AUTHORS.md
index 4dfb97641a..cbc5bd0762 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -56,6 +56,7 @@ name is available.
Dana Olson (adolson)
Daniel J. Ramirez (djrm)
Daniel Rakos (aqnuep)
+ dankan1890
David Sichma (DavidSichma)
Dharkael (lupoDharkael)
Dmitry Koteroff (Krakean)
diff --git a/DONORS.md b/DONORS.md
index eaab9d969c..df066bc16c 100644
--- a/DONORS.md
+++ b/DONORS.md
@@ -25,6 +25,7 @@ generous deed immortalized in the next stable release of Godot Engine.
AD Ford
Alan Beauchamp
Anand Mallik
+ Andres Hernandez
Andrew Dunai
Brandon Lamb
Christopher Montesano
@@ -38,8 +39,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Jacob McKenney
Javary Co.
Jeffery Chiu
- Jeppe Zapp
- John Benard (Linuxydable)
Justin Arnold
Justo Delgado Baudí
Kyle Szklenski
@@ -65,7 +64,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Ed Morley
Florian Krick
Florian Rämisch
- GiulianoB
Jakub Grzesik
Manuele Finocchiaro
Officine Pixel S.n.c.
@@ -75,8 +73,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Taylor Ritenour
Zaven Muradyan
- _
- Alexander Trey Saunders
Asher Glick
Austen McRae
Bernhard Werner
@@ -110,11 +106,9 @@ generous deed immortalized in the next stable release of Godot Engine.
thechris
Tom Langwaldt
tukon
- Unseen Domains
William Wold
Alex Khayrullin
- Branwyn “Bee†Tylwyth
Chris Goddard
Chris Serino
Christian Padilla
@@ -127,7 +121,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Joshua Flores
Krzysztof Jankowski
Lord Bloodhound
- Nathan Lundquist
Pascal Grüter
Petr Malac
Rami
@@ -136,6 +129,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Robert Willes
Ronnie Ashlock
Thomas Bjarnelöf
+ Unseen Domains
Valryia
Vincent Henderson
Wojciech Chojnacki
@@ -148,18 +142,17 @@ generous deed immortalized in the next stable release of Godot Engine.
André Frélicot
Andrew Bowen
aoshiwik
- Ben Botwin
Carlos de Sousa Marques
Chase Taranto
Chris Petrich
Christian Leth Jeppesen
Christoph Schröder
Cody Parker
+ Craig Ostrin
D
Daniel Eichler
David White
Eric Monson
- Erik Hatfield
Eugenio Hugo Salgüero Jáñez
Fain
flesk
@@ -233,23 +226,21 @@ generous deed immortalized in the next stable release of Godot Engine.
Albin Jonasson Svärdsby
Alder Stefano
Alessandro Senese
+ alex clavelle
Alex Davies-Moore
Allen Schade
Andreas Evers
Andreas Krampitz
André Simões
- Andrés Rodríguez
Andrew Thomas
Andrzej Skalski
Angelos Arnaoutis
- Anthony Bongiovanni
Anthony Staunton
AP Condomines
Arda Erol
Arseniy M
Arthur S. Muszynski
Asger
- Atilla Kiran
Aubrey Falconer
Avencherus
B A
@@ -269,7 +260,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Chris Brown
Chris Chapin
Christian Baune
- Christian Chipont
Christian Winter
Christoffer Sundbom
Christopher Schmitt
@@ -292,12 +282,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Dragontrapper
Dr Ewan Murray
Duobix
+ Duodecimal
+ Dylan Todd
Eduardo Teixeira
Edward Herbert
Egon Elbre
- Ellen Marie Dash
Elmeri '- Duy Kevin Nguyen
- Emanuel Kotzayan
Eric Ellingson
Eric Williams
Erkki Seppälä
@@ -314,6 +304,7 @@ generous deed immortalized in the next stable release of Godot Engine.
gamedev by Celio
Gary Hulst
George Marques
+ GiulianoB
Greg Olson
GREGORY C FEIN
Greg P
@@ -321,7 +312,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Guldoman
Hal A
Heribert Hirth
- Hiroshi Naruo
Hunter Jones
Hylpher
Iiari
@@ -332,12 +322,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Jako Danar
James A F Manley
Jannik Gröger
+ Jarrod Davis
Jax
Jeff Hungerford
Jennifer Graves
Jeremy Kahn
Jesse Dubay
- Joao Senerchia
Joe Alden
Joel Fivat
Joel Setterberg
@@ -372,6 +362,7 @@ generous deed immortalized in the next stable release of Godot Engine.
KsyTek Games
Kuan Cheang
kycho
+ Leonardo Dimano
Levi Lindsey
Linus Lind Lundgren
Lionel Gaillard
@@ -383,7 +374,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Malik Nejer
Marcus Richter
Markus Michael Egger
- Martin Candela
Martin Holas
Martin Liška
Matthew Little
@@ -407,6 +397,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Natrim
nee
Neil Blakey-Milner
+ Neil Wang
Nerdforge
Nicholas
Nick Macholl
@@ -414,7 +405,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Nicolás Montaña
Nicolas SAN AGUSTIN
Nima Farid
- Nithin Jino
NZ
Oleg Reva
Olivier
@@ -433,6 +423,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Pitsanu Tongprasin
Point08
Poryg
+ Rad Cat
Rafa Laguna
rainerLinux
Raphael Leroux
@@ -448,13 +439,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Roger Smith
Roland RzÄ…sa
Roman Tinkov
- Ronan Jouchet
+ Ronan
Ryan Groom
Ryan Hentz
Sam.C
Sam Edson
Samuele Zolfanelli
- Sanka.X
Sasori Olkof
Scott D. Yelich
Sebastian Michailidis
diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp
index 4586dc6d14..68650019a2 100644
--- a/core/bind/core_bind.cpp
+++ b/core/bind/core_bind.cpp
@@ -1393,7 +1393,7 @@ void _OS::_bind_methods() {
ADD_PROPERTY_DEFAULT("current_screen", 0);
ADD_PROPERTY_DEFAULT("exit_code", 0);
ADD_PROPERTY_DEFAULT("vsync_enabled", true);
- ADD_PROPERTY_DEFAULT("vsync_via_compositor", true);
+ ADD_PROPERTY_DEFAULT("vsync_via_compositor", false);
ADD_PROPERTY_DEFAULT("low_processor_usage_mode", false);
ADD_PROPERTY_DEFAULT("low_processor_usage_mode_sleep_usec", 6900);
ADD_PROPERTY_DEFAULT("keep_screen_on", true);
@@ -3024,6 +3024,16 @@ float _Engine::get_frames_per_second() const {
return Engine::get_singleton()->get_frames_per_second();
}
+uint64_t _Engine::get_physics_frames() const {
+
+ return Engine::get_singleton()->get_physics_frames();
+}
+
+uint64_t _Engine::get_idle_frames() const {
+
+ return Engine::get_singleton()->get_idle_frames();
+}
+
void _Engine::set_time_scale(float p_scale) {
Engine::get_singleton()->set_time_scale(p_scale);
}
@@ -3108,6 +3118,8 @@ void _Engine::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_frames_drawn"), &_Engine::get_frames_drawn);
ClassDB::bind_method(D_METHOD("get_frames_per_second"), &_Engine::get_frames_per_second);
+ ClassDB::bind_method(D_METHOD("get_physics_frames"), &_Engine::get_physics_frames);
+ ClassDB::bind_method(D_METHOD("get_idle_frames"), &_Engine::get_idle_frames);
ClassDB::bind_method(D_METHOD("get_main_loop"), &_Engine::get_main_loop);
diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h
index 7c5031cad4..65f20c375e 100644
--- a/core/bind/core_bind.h
+++ b/core/bind/core_bind.h
@@ -747,6 +747,8 @@ public:
int get_target_fps() const;
float get_frames_per_second() const;
+ uint64_t get_physics_frames() const;
+ uint64_t get_idle_frames() const;
int get_frames_drawn();
diff --git a/core/object.cpp b/core/object.cpp
index 35ccc38d4e..21666a334c 100644
--- a/core/object.cpp
+++ b/core/object.cpp
@@ -1185,13 +1185,11 @@ Error Object::emit_signal(const StringName &p_name, const Variant **p_args, int
const Connection &c = slot_map.getv(i).conn;
- Object *target;
-#ifdef DEBUG_ENABLED
- target = ObjectDB::get_instance(slot_map.getk(i)._id);
- ERR_CONTINUE(!target);
-#else
- target = c.target;
-#endif
+ Object *target = ObjectDB::get_instance(slot_map.getk(i)._id);
+ if (!target) {
+ // Target might have been deleted during signal callback, this is expected and OK.
+ continue;
+ }
const Variant **args = p_args;
int argc = p_argcount;
@@ -1519,10 +1517,6 @@ void Object::_disconnect(const StringName &p_signal, Object *p_to_object, const
Signal *s = signal_map.getptr(p_signal);
ERR_FAIL_COND_MSG(!s, vformat("Nonexistent signal '%s' in %s.", p_signal, to_string()));
- ERR_FAIL_COND_MSG(s->lock > 0,
- vformat("Attempt to disconnect %s signal '%s' while in emission callback '%s' (in target %s). Use CONNECT_DEFERRED (to be able to safely disconnect) or CONNECT_ONESHOT (for automatic disconnection) as connection flags.",
- to_string(), p_signal, p_to_method, p_to_object->to_string()));
-
Signal::Target target(p_to_object->get_instance_id(), p_to_method);
ERR_FAIL_COND_MSG(!s->slot_map.has(target), "Disconnecting nonexistent signal '" + p_signal + "', slot: " + itos(target._id) + ":" + target.method + ".");
diff --git a/doc/classes/ArrayMesh.xml b/doc/classes/ArrayMesh.xml
index 62ff0edbd2..e3e9c38419 100644
--- a/doc/classes/ArrayMesh.xml
+++ b/doc/classes/ArrayMesh.xml
@@ -23,6 +23,7 @@
The [code]MeshInstance[/code] is ready to be added to the SceneTree to be shown.
</description>
<tutorials>
+ <link>http://docs.godotengine.org/en/latest/tutorials/content/procedural_geometry/arraymesh.html</link>
</tutorials>
<methods>
<method name="add_blend_shape">
@@ -185,6 +186,7 @@
</methods>
<members>
<member name="blend_shape_mode" type="int" setter="set_blend_shape_mode" getter="get_blend_shape_mode" enum="Mesh.BlendShapeMode" default="1">
+ Sets the blend shape mode to one of [enum Mesh.BlendShapeMode].
</member>
<member name="custom_aabb" type="AABB" setter="set_custom_aabb" getter="get_custom_aabb" default="AABB( 0, 0, 0, 0, 0, 0 )">
Overrides the [AABB] with one defined by user for use with frustum culling. Especially useful to avoid unexpected culling when using a shader to offset vertices.
diff --git a/doc/classes/BaseButton.xml b/doc/classes/BaseButton.xml
index 21f46efe84..0128e7b220 100644
--- a/doc/classes/BaseButton.xml
+++ b/doc/classes/BaseButton.xml
@@ -112,6 +112,7 @@
The state of buttons are disabled.
</constant>
<constant name="DRAW_HOVER_PRESSED" value="4" enum="DrawMode">
+ The state of buttons are both hovered and pressed.
</constant>
<constant name="ACTION_MODE_BUTTON_PRESS" value="0" enum="ActionMode">
Require just a press to consider the button clicked.
diff --git a/doc/classes/CPUParticles.xml b/doc/classes/CPUParticles.xml
index e68b0feb2d..cef0ee7587 100644
--- a/doc/classes/CPUParticles.xml
+++ b/doc/classes/CPUParticles.xml
@@ -367,5 +367,8 @@
<constant name="EMISSION_SHAPE_DIRECTED_POINTS" value="4" enum="EmissionShape">
Particles will be emitted at a position chosen randomly among [member emission_points]. Particle velocity and rotation will be set based on [member emission_normals]. Particle color will be modulated by [member emission_colors].
</constant>
+ <constant name="EMISSION_SHAPE_MAX" value="5" enum="EmissionShape">
+ Represents the size of the [enum EmissionShape] enum.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/CPUParticles2D.xml b/doc/classes/CPUParticles2D.xml
index c8dbffb4cb..dac00051a9 100644
--- a/doc/classes/CPUParticles2D.xml
+++ b/doc/classes/CPUParticles2D.xml
@@ -360,5 +360,8 @@
<constant name="EMISSION_SHAPE_DIRECTED_POINTS" value="4" enum="EmissionShape">
Particles will be emitted at a position chosen randomly among [member emission_points]. Particle velocity and rotation will be set based on [member emission_normals]. Particle color will be modulated by [member emission_colors].
</constant>
+ <constant name="EMISSION_SHAPE_MAX" value="5" enum="EmissionShape">
+ Represents the size of the [enum EmissionShape] enum.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/CollisionObject2D.xml b/doc/classes/CollisionObject2D.xml
index b9ec9480cf..bbc2e44dc0 100644
--- a/doc/classes/CollisionObject2D.xml
+++ b/doc/classes/CollisionObject2D.xml
@@ -44,6 +44,7 @@
<argument index="0" name="owner_id" type="int">
</argument>
<description>
+ Returns the [code]one_way_collision_margin[/code] of the shape owner identified by given [code]owner_id[/code].
</description>
</method>
<method name="get_shape_owners">
@@ -199,6 +200,7 @@
<argument index="1" name="margin" type="float">
</argument>
<description>
+ Sets the [code]one_way_collision_margin[/code] of the shape owner identified by given [code]owner_id[/code] to [code]margin[/code] pixels.
</description>
</method>
<method name="shape_owner_set_transform">
diff --git a/doc/classes/ColorPickerButton.xml b/doc/classes/ColorPickerButton.xml
index e8c78fb6bf..37116b096a 100644
--- a/doc/classes/ColorPickerButton.xml
+++ b/doc/classes/ColorPickerButton.xml
@@ -43,10 +43,12 @@
</signal>
<signal name="picker_created">
<description>
+ Emitted when the [ColorPicker] is created (the button is pressed for the first time).
</description>
</signal>
<signal name="popup_closed">
<description>
+ Emitted when the [ColorPicker] is closed.
</description>
</signal>
</signals>
diff --git a/doc/classes/ConfigFile.xml b/doc/classes/ConfigFile.xml
index d99f90d09a..68966b6f59 100644
--- a/doc/classes/ConfigFile.xml
+++ b/doc/classes/ConfigFile.xml
@@ -26,6 +26,7 @@
config.save("user://settings.cfg")
[/codeblock]
Keep in mind that section and property names can't contain spaces. Anything after a space will be ignored on save and on load.
+ ConfigFiles can also contain manually written comment lines starting with a semicolon ([code];[/code]). Those lines will be ignored when parsing the file. Note that comments will be lost when saving the ConfigFile. This can still be useful for dedicated server configuration files, which are typically never overwritten without explicit user action.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/Crypto.xml b/doc/classes/Crypto.xml
index bce7895973..bb2c443618 100644
--- a/doc/classes/Crypto.xml
+++ b/doc/classes/Crypto.xml
@@ -22,6 +22,7 @@
key.save("user://generated.key")
cert.save("user://generated.crt")
[/codeblock]
+ [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/CryptoKey.xml b/doc/classes/CryptoKey.xml
index 8c825c9e1c..8feb7d4809 100644
--- a/doc/classes/CryptoKey.xml
+++ b/doc/classes/CryptoKey.xml
@@ -6,6 +6,7 @@
<description>
The CryptoKey class represents a cryptographic key. Keys can be loaded and saved like any other [Resource].
They can be used to generate a self-signed [X509Certificate] via [method Crypto.generate_self_signed_certificate] and as private key in [method StreamPeerSSL.accept_stream] along with the appropriate certificate.
+ [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml
index 04e203793b..53ddde0e4a 100644
--- a/doc/classes/Engine.xml
+++ b/doc/classes/Engine.xml
@@ -41,7 +41,7 @@
<return type="int">
</return>
<description>
- Returns the total number of frames drawn.
+ Returns the total number of frames drawn. If the render loop is disabled with [code]--disable-render-loop[/code] via command line, this returns [code]0[/code]. See also [method get_idle_frames].
</description>
</method>
<method name="get_frames_per_second" qualifiers="const">
@@ -51,6 +51,13 @@
Returns the frames per second of the running game.
</description>
</method>
+ <method name="get_idle_frames" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ Returns the total number of frames passed since engine initialization which is advanced on each [b]idle frame[/b], regardless of whether the render loop is enabled. See also [method get_frames_drawn].
+ </description>
+ </method>
<method name="get_license_info" qualifiers="const">
<return type="Dictionary">
</return>
@@ -72,6 +79,13 @@
Returns the main loop object (see [MainLoop] and [SceneTree]).
</description>
</method>
+ <method name="get_physics_frames" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ Returns the total number of frames passed since engine initialization which is advanced on each [b]physics frame[/b].
+ </description>
+ </method>
<method name="get_physics_interpolation_fraction" qualifiers="const">
<return type="float">
</return>
diff --git a/doc/classes/Geometry.xml b/doc/classes/Geometry.xml
index 3824baa4dc..dbc06f7c4f 100644
--- a/doc/classes/Geometry.xml
+++ b/doc/classes/Geometry.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="Geometry" inherits="Object" category="Core" version="3.2">
<brief_description>
+ Helper node to calculate generic geometry operations.
</brief_description>
<description>
+ Geometry provides users with a set of helper functions to create geometric shapes, compute intersections between shapes, and process various other geometric operations.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/GeometryInstance.xml b/doc/classes/GeometryInstance.xml
index 02f2c27043..980815e5fd 100644
--- a/doc/classes/GeometryInstance.xml
+++ b/doc/classes/GeometryInstance.xml
@@ -15,6 +15,7 @@
<argument index="0" name="flag" type="int" enum="GeometryInstance.Flags">
</argument>
<description>
+ Returns the [enum GeometryInstance.Flags] that have been set for this object.
</description>
</method>
<method name="set_custom_aabb">
@@ -34,6 +35,7 @@
<argument index="1" name="value" type="bool">
</argument>
<description>
+ Sets the [enum GeometryInstance.Flags] specified. See [enum GeometryInstance.Flags] for options.
</description>
</method>
</methods>
diff --git a/doc/classes/HashingContext.xml b/doc/classes/HashingContext.xml
index 802b186ef3..8a20eb99b8 100644
--- a/doc/classes/HashingContext.xml
+++ b/doc/classes/HashingContext.xml
@@ -27,6 +27,7 @@
# Print the result as hex string and array.
printt(res.hex_encode(), Array(res))
[/codeblock]
+ [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml
index 0303585120..612b9ed3f5 100644
--- a/doc/classes/Image.xml
+++ b/doc/classes/Image.xml
@@ -71,6 +71,7 @@
<argument index="0" name="bump_scale" type="float" default="1.0">
</argument>
<description>
+ Converts a bumpmap to a normalmap. A bumpmap provides a height offset per-pixel, while a normalmap provides a normal direction per pixel.
</description>
</method>
<method name="clear_mipmaps">
@@ -165,7 +166,7 @@
<return type="int" enum="Image.AlphaMode">
</return>
<description>
- Returns [constant ALPHA_BLEND] if the image has data for alpha values. Returns [constant ALPHA_BIT] if all the alpha values are below a certain threshold or the maximum value. Returns [constant ALPHA_NONE] if no data for alpha values is found.
+ Returns [constant ALPHA_BLEND] if the image has data for alpha values. Returns [constant ALPHA_BIT] if all the alpha values are stored in a single bit. Returns [constant ALPHA_NONE] if no data for alpha values is found.
</description>
</method>
<method name="expand_x2_hq2x">
@@ -405,6 +406,7 @@
<return type="Image">
</return>
<description>
+ Converts a standard RGBE (Red Green Blue Exponent) image to an sRGB image.
</description>
</method>
<method name="save_exr" qualifiers="const">
@@ -502,8 +504,10 @@
The maximal height allowed for [Image] resources.
</constant>
<constant name="FORMAT_L8" value="0" enum="Format">
+ Texture format with a single 8-bit depth representing luminance.
</constant>
<constant name="FORMAT_LA8" value="1" enum="Format">
+ OpenGL texture format with two values, luminance and alpha each stored with 8 bits.
</constant>
<constant name="FORMAT_R8" value="2" enum="Format">
OpenGL texture format [code]RED[/code] with a single component and a bitdepth of 8.
@@ -643,26 +647,37 @@
Performs Lanczos interpolation. This is the slowest image resizing mode, but it typically gives the best results, especially when downscalng images.
</constant>
<constant name="ALPHA_NONE" value="0" enum="AlphaMode">
+ Image does not have alpha.
</constant>
<constant name="ALPHA_BIT" value="1" enum="AlphaMode">
+ Image stores alpha in a single bit.
</constant>
<constant name="ALPHA_BLEND" value="2" enum="AlphaMode">
+ Image uses alpha.
</constant>
<constant name="COMPRESS_S3TC" value="0" enum="CompressMode">
+ Use S3TC compression.
</constant>
<constant name="COMPRESS_PVRTC2" value="1" enum="CompressMode">
+ Use PVRTC2 compression.
</constant>
<constant name="COMPRESS_PVRTC4" value="2" enum="CompressMode">
+ Use PVRTC4 compression.
</constant>
<constant name="COMPRESS_ETC" value="3" enum="CompressMode">
+ Use ETC compression.
</constant>
<constant name="COMPRESS_ETC2" value="4" enum="CompressMode">
+ Use ETC2 compression.
</constant>
<constant name="COMPRESS_SOURCE_GENERIC" value="0" enum="CompressSource">
+ Source texture (before compression) is a regular texture. Default for all textures.
</constant>
<constant name="COMPRESS_SOURCE_SRGB" value="1" enum="CompressSource">
+ Source texture (before compression) is in sRGB space.
</constant>
<constant name="COMPRESS_SOURCE_NORMAL" value="2" enum="CompressSource">
+ Source texture (before compression) is a normal texture (e.g. it can be compressed into two channels).
</constant>
</constants>
</class>
diff --git a/doc/classes/KinematicBody.xml b/doc/classes/KinematicBody.xml
index f796b15307..c32264221d 100644
--- a/doc/classes/KinematicBody.xml
+++ b/doc/classes/KinematicBody.xml
@@ -25,14 +25,14 @@
<return type="Vector3">
</return>
<description>
- Returns the normal vector of the floor.
+ Returns the surface normal of the floor at the last collision point. Only valid after calling [method move_and_slide] or [method move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/code].
</description>
</method>
<method name="get_floor_velocity" qualifiers="const">
<return type="Vector3">
</return>
<description>
- Returns the velocity of the floor. Only updates when calling [method move_and_slide].
+ Returns the linear velocity of the floor at the last collision point. Only valid after calling [method move_and_slide] or [method move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/code].
</description>
</method>
<method name="get_slide_collision">
@@ -106,7 +106,7 @@
<description>
Moves the body along a vector. If the body collides with another, it will slide along the other body rather than stop immediately. If the other body is a [KinematicBody] or [RigidBody], it will also be affected by the motion of the other body. You can use this to make moving or rotating platforms, or to make nodes push other nodes.
[code]linear_velocity[/code] is the velocity vector (typically meters per second). Unlike in [method move_and_collide], you should [i]not[/i] multiply it by [code]delta[/code] — the physics engine handles applying the velocity.
- [code]floor_normal[/code] is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of [code]Vector3(0, 0, 0)[/code], everything is considered a wall. This is useful for topdown games.
+ [code]up_direction[/code] is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of [code]Vector3(0, 0, 0)[/code], everything is considered a wall.
If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on slopes if you include gravity in [code]linear_velocity[/code].
If the body collides, it will change direction a maximum of [code]max_slides[/code] times before it stops.
[code]floor_max_angle[/code] is the maximum angle (in radians) where a slope is still considered a floor (or a ceiling), rather than a wall. The default value equals 45 degrees.
@@ -121,7 +121,7 @@
</argument>
<argument index="1" name="snap" type="Vector3">
</argument>
- <argument index="2" name="floor_normal" type="Vector3" default="Vector3( 0, 0, 0 )">
+ <argument index="2" name="up_direction" type="Vector3" default="Vector3( 0, 0, 0 )">
</argument>
<argument index="3" name="stop_on_slope" type="bool" default="false">
</argument>
diff --git a/doc/classes/KinematicBody2D.xml b/doc/classes/KinematicBody2D.xml
index 1de75cd71b..6a3b3dabb1 100644
--- a/doc/classes/KinematicBody2D.xml
+++ b/doc/classes/KinematicBody2D.xml
@@ -17,14 +17,14 @@
<return type="Vector2">
</return>
<description>
- Returns the normal vector of the floor.
+ Returns the surface normal of the floor at the last collision point. Only valid after calling [method move_and_slide] or [method move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/code].
</description>
</method>
<method name="get_floor_velocity" qualifiers="const">
<return type="Vector2">
</return>
<description>
- Returns the velocity of the floor. Only updates when calling [method move_and_slide].
+ Returns the linear velocity of the floor at the last collision point. Only valid after calling [method move_and_slide] or [method move_and_slide_with_snap] and when [method is_on_floor] returns [code]true[/code].
</description>
</method>
<method name="get_slide_collision">
@@ -91,7 +91,7 @@
</return>
<argument index="0" name="linear_velocity" type="Vector2">
</argument>
- <argument index="1" name="floor_normal" type="Vector2" default="Vector2( 0, 0 )">
+ <argument index="1" name="up_direction" type="Vector2" default="Vector2( 0, 0 )">
</argument>
<argument index="2" name="stop_on_slope" type="bool" default="false">
</argument>
@@ -104,7 +104,7 @@
<description>
Moves the body along a vector. If the body collides with another, it will slide along the other body rather than stop immediately. If the other body is a [KinematicBody2D] or [RigidBody2D], it will also be affected by the motion of the other body. You can use this to make moving or rotating platforms, or to make nodes push other nodes.
[code]linear_velocity[/code] is the velocity vector in pixels per second. Unlike in [method move_and_collide], you should [i]not[/i] multiply it by [code]delta[/code] — the physics engine handles applying the velocity.
- [code]floor_normal[/code] is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of [code]Vector2(0, 0)[/code], everything is considered a wall. This is useful for topdown games.
+ [code]up_direction[/code] is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of [code]Vector2(0, 0)[/code], everything is considered a wall. This is useful for topdown games.
If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on slopes when you include gravity in [code]linear_velocity[/code] and the body is standing still.
If the body collides, it will change direction a maximum of [code]max_slides[/code] times before it stops.
[code]floor_max_angle[/code] is the maximum angle (in radians) where a slope is still considered a floor (or a ceiling), rather than a wall. The default value equals 45 degrees.
@@ -119,7 +119,7 @@
</argument>
<argument index="1" name="snap" type="Vector2">
</argument>
- <argument index="2" name="floor_normal" type="Vector2" default="Vector2( 0, 0 )">
+ <argument index="2" name="up_direction" type="Vector2" default="Vector2( 0, 0 )">
</argument>
<argument index="3" name="stop_on_slope" type="bool" default="false">
</argument>
diff --git a/doc/classes/Light.xml b/doc/classes/Light.xml
index 6ef7c2652d..ae5bba4f06 100644
--- a/doc/classes/Light.xml
+++ b/doc/classes/Light.xml
@@ -16,6 +16,7 @@
<argument index="0" name="param" type="int" enum="Light.Param">
</argument>
<description>
+ Returns the value of the specified [enum Light.Param] parameter.
</description>
</method>
<method name="set_param">
@@ -26,6 +27,7 @@
<argument index="1" name="value" type="float">
</argument>
<description>
+ Sets the value of the specified [enum Light.Param] parameter.
</description>
</method>
</methods>
@@ -67,38 +69,54 @@
If [code]true[/code], the light will cast shadows.
</member>
<member name="shadow_reverse_cull_face" type="bool" setter="set_shadow_reverse_cull_face" getter="get_shadow_reverse_cull_face" default="false">
+ If [code]true[/code], reverses the backface culling of the mesh. This can be useful when you have a flat mesh that has a light behind it. If you need to cast a shadow on both sides of the mesh, set the mesh to use double-sided shadows with [constant GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED].
</member>
</members>
<constants>
<constant name="PARAM_ENERGY" value="0" enum="Param">
+ Constant for accessing [member light_energy].
</constant>
<constant name="PARAM_INDIRECT_ENERGY" value="1" enum="Param">
+ Constant for accessing [member light_indirect_energy].
</constant>
<constant name="PARAM_SPECULAR" value="2" enum="Param">
+ Constant for accessing [member light_specular].
</constant>
<constant name="PARAM_RANGE" value="3" enum="Param">
+ Constant for accessing [member OmniLight.omni_range] or [member SpotLight.spot_range].
</constant>
<constant name="PARAM_ATTENUATION" value="4" enum="Param">
+ Constant for accessing [member OmniLight.omni_attenuation] or [member SpotLight.spot_attenuation].
</constant>
<constant name="PARAM_SPOT_ANGLE" value="5" enum="Param">
+ Constant for accessing [member SpotLight.spot_angle].
</constant>
<constant name="PARAM_SPOT_ATTENUATION" value="6" enum="Param">
+ Constant for accessing [member SpotLight.spot_angle_attenuation].
</constant>
<constant name="PARAM_CONTACT_SHADOW_SIZE" value="7" enum="Param">
+ Constant for accessing [member shadow_contact].
</constant>
<constant name="PARAM_SHADOW_MAX_DISTANCE" value="8" enum="Param">
+ Constant for accessing [member DirectionalLight.directional_shadow_max_distance].
</constant>
<constant name="PARAM_SHADOW_SPLIT_1_OFFSET" value="9" enum="Param">
+ Constant for accessing [member DirectionalLight.directional_shadow_split_1].
</constant>
<constant name="PARAM_SHADOW_SPLIT_2_OFFSET" value="10" enum="Param">
+ Constant for accessing [member DirectionalLight.directional_shadow_split_2].
</constant>
<constant name="PARAM_SHADOW_SPLIT_3_OFFSET" value="11" enum="Param">
+ Constant for accessing [member DirectionalLight.directional_shadow_split_3].
</constant>
<constant name="PARAM_SHADOW_NORMAL_BIAS" value="12" enum="Param">
+ Constant for accessing [member DirectionalLight.directional_shadow_normal_bias].
</constant>
<constant name="PARAM_SHADOW_BIAS" value="13" enum="Param">
+ Constant for accessing [member shadow_bias].
</constant>
<constant name="PARAM_SHADOW_BIAS_SPLIT_SCALE" value="14" enum="Param">
+ Constant for accessing [member DirectionalLight.directional_shadow_bias_split_scale].
</constant>
<constant name="PARAM_MAX" value="15" enum="Param">
Represents the size of the [enum Param] enum.
diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml
index 31cfc15649..7282d635b1 100644
--- a/doc/classes/LineEdit.xml
+++ b/doc/classes/LineEdit.xml
@@ -4,7 +4,7 @@
Control that provides single-line string editing.
</brief_description>
<description>
- LineEdit provides a single-line string editor, used for text fields. It features many built-in shortcuts which will always be available:
+ LineEdit provides a single-line string editor, used for text fields. It features many built-in shortcuts which will always be available: (the Ctrl here maps to Command on macOS)
- Ctrl + C: Copy
- Ctrl + X: Cut
- Ctrl + V or Ctrl + Y: Paste/"yank"
@@ -14,6 +14,15 @@
- Ctrl + K: Delete text from the cursor position to the end of the line
- Ctrl + A: Select all text
- Up/Down arrow: Move the cursor to the beginning/end of the line
+ On macOS, some extra keyboard shortcuts are available:
+ - Ctrl + F: Like the right arrow key, move the cursor one character right
+ - Ctrl + B: Like the left arrow key, move the cursor one character left
+ - Ctrl + P: Like the up arrow key, move the cursor to the previous line
+ - Ctrl + N: Like the down arrow key, move the cursor to the next line
+ - Ctrl + D: Like the Delete key, delete the character on the right side of cursor
+ - Ctrl + H: Like the Backspace key, delete the character on the left side of the cursor
+ - Command + Left arrow: Like the Home key, move the cursor to the beginning of the line
+ - Command + Right arrow: Like the End key, move the cursor to the end of the line
</description>
<tutorials>
</tutorials>
@@ -135,6 +144,7 @@
</member>
<member name="text" type="String" setter="set_text" getter="get_text" default="&quot;&quot;">
String value of the [LineEdit].
+ [b]Note:[/b] Changing text using this property won't emit the [signal text_changed] signal.
</member>
</members>
<signals>
@@ -226,7 +236,7 @@
Font color when editing is disabled.
</theme_item>
<theme_item name="minimum_spaces" type="int" default="12">
- Minimum horizontal space for the text (not counting the clear button and content margins).
+ Minimum horizontal space for the text (not counting the clear button and content margins). This value is measured in count of space characters (i.e. this amount of space characters can be displayed without scrolling).
</theme_item>
<theme_item name="normal" type="StyleBox">
Default background for the [LineEdit].
diff --git a/doc/classes/MainLoop.xml b/doc/classes/MainLoop.xml
index d5ca39e09a..606c898a35 100644
--- a/doc/classes/MainLoop.xml
+++ b/doc/classes/MainLoop.xml
@@ -69,6 +69,7 @@
<argument index="1" name="meta" type="Variant">
</argument>
<description>
+ Called when the user performs an action in the system global menu (e.g. the Mac OS menu bar).
</description>
</method>
<method name="_idle" qualifiers="virtual">
diff --git a/doc/classes/MenuButton.xml b/doc/classes/MenuButton.xml
index 52fb4b9ca1..642b94a047 100644
--- a/doc/classes/MenuButton.xml
+++ b/doc/classes/MenuButton.xml
@@ -4,7 +4,8 @@
Special button that brings up a [PopupMenu] when clicked.
</brief_description>
<description>
- Special button that brings up a [PopupMenu] when clicked. That's pretty much all it does, as it's just a helper class when building GUIs.
+ Special button that brings up a [PopupMenu] when clicked.
+ New items can be created inside this [PopupMenu] using [code]get_popup().add_item("My Item Name")[/code]. You can also create them directly from the editor. To do so, select the MenuButton node, then in the toolbar at the top of the 2D editor, click [b]Items[/b] then click [b]Add[/b] in the popup. You will be able to give each items new properties.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/Mesh.xml b/doc/classes/Mesh.xml
index d4804930e1..2dd3ce5529 100644
--- a/doc/classes/Mesh.xml
+++ b/doc/classes/Mesh.xml
@@ -103,6 +103,7 @@
</methods>
<members>
<member name="lightmap_size_hint" type="Vector2" setter="set_lightmap_size_hint" getter="get_lightmap_size_hint" default="Vector2( 0, 0 )">
+ Sets a hint to be used for lightmap resolution in [BakedLightmap]. Overrides [member BakedLightmap.bake_default_texels_per_unit].
</member>
</members>
<constants>
@@ -128,52 +129,76 @@
Render array as triangle fans.
</constant>
<constant name="BLEND_SHAPE_MODE_NORMALIZED" value="0" enum="BlendShapeMode">
+ Blend shapes are normalized.
</constant>
<constant name="BLEND_SHAPE_MODE_RELATIVE" value="1" enum="BlendShapeMode">
+ Blend shapes are relative to base weight.
</constant>
<constant name="ARRAY_FORMAT_VERTEX" value="1" enum="ArrayFormat">
+ Mesh array contains vertices. All meshes require a vertex array so this should always be present.
</constant>
<constant name="ARRAY_FORMAT_NORMAL" value="2" enum="ArrayFormat">
+ Mesh array contains normals.
</constant>
<constant name="ARRAY_FORMAT_TANGENT" value="4" enum="ArrayFormat">
+ Mesh array contains tangents.
</constant>
<constant name="ARRAY_FORMAT_COLOR" value="8" enum="ArrayFormat">
+ Mesh array contains colors.
</constant>
<constant name="ARRAY_FORMAT_TEX_UV" value="16" enum="ArrayFormat">
+ Mesh array contains UVs.
</constant>
<constant name="ARRAY_FORMAT_TEX_UV2" value="32" enum="ArrayFormat">
+ Mesh array contains second UV.
</constant>
<constant name="ARRAY_FORMAT_BONES" value="64" enum="ArrayFormat">
+ Mesh array contains bones.
</constant>
<constant name="ARRAY_FORMAT_WEIGHTS" value="128" enum="ArrayFormat">
+ Mesh array contains bone weights.
</constant>
<constant name="ARRAY_FORMAT_INDEX" value="256" enum="ArrayFormat">
+ Mesh array uses indices.
</constant>
<constant name="ARRAY_COMPRESS_BASE" value="9" enum="ArrayFormat">
+ Used internally to calculate other [code]ARRAY_COMPRESS_*[/code] enum values. Do not use.
</constant>
<constant name="ARRAY_COMPRESS_VERTEX" value="512" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) vertex array.
</constant>
<constant name="ARRAY_COMPRESS_NORMAL" value="1024" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) normal array.
</constant>
<constant name="ARRAY_COMPRESS_TANGENT" value="2048" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) tangent array.
</constant>
<constant name="ARRAY_COMPRESS_COLOR" value="4096" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) color array.
</constant>
<constant name="ARRAY_COMPRESS_TEX_UV" value="8192" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) UV coordinates array.
</constant>
<constant name="ARRAY_COMPRESS_TEX_UV2" value="16384" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) UV coordinates array for the second UV coordinates.
</constant>
<constant name="ARRAY_COMPRESS_BONES" value="32768" enum="ArrayFormat">
+ Flag used to mark a compressed bone array.
</constant>
<constant name="ARRAY_COMPRESS_WEIGHTS" value="65536" enum="ArrayFormat">
+ Flag used to mark a compressed (half float) weight array.
</constant>
<constant name="ARRAY_COMPRESS_INDEX" value="131072" enum="ArrayFormat">
+ Flag used to mark a compressed index array.
</constant>
<constant name="ARRAY_FLAG_USE_2D_VERTICES" value="262144" enum="ArrayFormat">
+ Flag used to mark that the array contains 2D vertices.
</constant>
<constant name="ARRAY_FLAG_USE_16_BIT_BONES" value="524288" enum="ArrayFormat">
+ Flag used to mark that the array uses 16-bit bones instead of 8-bit.
</constant>
<constant name="ARRAY_COMPRESS_DEFAULT" value="97280" enum="ArrayFormat">
+ Used to set flags [constant ARRAY_COMPRESS_VERTEX], [constant ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant ARRAY_COMPRESS_COLOR], [constant ARRAY_COMPRESS_TEX_UV], [constant ARRAY_COMPRESS_TEX_UV2] and [constant ARRAY_COMPRESS_WEIGHTS] quickly.
</constant>
<constant name="ARRAY_VERTEX" value="0" enum="ArrayType">
Array of vertices.
diff --git a/doc/classes/MeshInstance.xml b/doc/classes/MeshInstance.xml
index a4d2bb4295..c7cddf5977 100644
--- a/doc/classes/MeshInstance.xml
+++ b/doc/classes/MeshInstance.xml
@@ -66,6 +66,7 @@
[NodePath] to the [Skeleton] associated with the instance.
</member>
<member name="skin" type="Skin" setter="set_skin" getter="get_skin">
+ Sets the skin to be used by this instance.
</member>
</members>
<constants>
diff --git a/doc/classes/MeshInstance2D.xml b/doc/classes/MeshInstance2D.xml
index 4b38b9aa96..7f1466ccf6 100644
--- a/doc/classes/MeshInstance2D.xml
+++ b/doc/classes/MeshInstance2D.xml
@@ -25,6 +25,7 @@
<signals>
<signal name="texture_changed">
<description>
+ Emitted when the [member texture] is changed.
</description>
</signal>
</signals>
diff --git a/doc/classes/MultiMeshInstance.xml b/doc/classes/MultiMeshInstance.xml
index 16f16fdc8b..7dcfd2808d 100644
--- a/doc/classes/MultiMeshInstance.xml
+++ b/doc/classes/MultiMeshInstance.xml
@@ -10,6 +10,7 @@
<tutorials>
<link>http://docs.godotengine.org/en/latest/tutorials/3d/vertex_animation/animating_thousands_of_fish.html</link>
<link>http://docs.godotengine.org/en/latest/tutorials/3d/using_multi_mesh_instance.html</link>
+ <link>http://docs.godotengine.org/en/latest/tutorials/optimization/using_multimesh.html</link>
</tutorials>
<methods>
</methods>
diff --git a/doc/classes/MultiMeshInstance2D.xml b/doc/classes/MultiMeshInstance2D.xml
index 8509986c3c..0c6f1a4a62 100644
--- a/doc/classes/MultiMeshInstance2D.xml
+++ b/doc/classes/MultiMeshInstance2D.xml
@@ -25,6 +25,7 @@
<signals>
<signal name="texture_changed">
<description>
+ Emitted when the [member texture] is changed.
</description>
</signal>
</signals>
diff --git a/doc/classes/NinePatchRect.xml b/doc/classes/NinePatchRect.xml
index 8935ac9d94..7a7973684d 100644
--- a/doc/classes/NinePatchRect.xml
+++ b/doc/classes/NinePatchRect.xml
@@ -15,6 +15,7 @@
<argument index="0" name="margin" type="int" enum="Margin">
</argument>
<description>
+ Returns the size of the margin identified by the given [enum Margin] constant.
</description>
</method>
<method name="set_patch_margin">
@@ -25,6 +26,7 @@
<argument index="1" name="value" type="int">
</argument>
<description>
+ Sets the size of the margin identified by the given [enum Margin] constant to [code]value[/code] in pixels.
</description>
</method>
</methods>
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index 2236c42094..2c44a3dfb0 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -937,8 +937,9 @@
<member name="vsync_enabled" type="bool" setter="set_use_vsync" getter="is_vsync_enabled" default="true">
If [code]true[/code], vertical synchronization (Vsync) is enabled.
</member>
- <member name="vsync_via_compositor" type="bool" setter="set_vsync_via_compositor" getter="is_vsync_via_compositor_enabled" default="true">
+ <member name="vsync_via_compositor" type="bool" setter="set_vsync_via_compositor" getter="is_vsync_via_compositor_enabled" default="false">
If [code]true[/code] and [code]vsync_enabled[/code] is true, the operating system's window compositor will be used for vsync when the compositor is enabled and the game is in windowed mode.
+ [b]Note:[/b] This option is experimental and meant to alleviate stutter experienced by some users. However, some users have experienced a Vsync framerate halving (e.g. from 60 FPS to 30 FPS) when using it.
[b]Note:[/b] This property is only implemented on Windows.
</member>
<member name="window_borderless" type="bool" setter="set_borderless_window" getter="get_borderless_window" default="false">
diff --git a/doc/classes/OmniLight.xml b/doc/classes/OmniLight.xml
index 7189826385..646c2d3166 100644
--- a/doc/classes/OmniLight.xml
+++ b/doc/classes/OmniLight.xml
@@ -33,8 +33,10 @@
Shadows are rendered to a cubemap. Slower than [constant SHADOW_DUAL_PARABOLOID], but higher-quality.
</constant>
<constant name="SHADOW_DETAIL_VERTICAL" value="0" enum="ShadowDetail">
+ Use more detail vertically when computing the shadow.
</constant>
<constant name="SHADOW_DETAIL_HORIZONTAL" value="1" enum="ShadowDetail">
+ Use more detail horizontally when computing the shadow.
</constant>
</constants>
</class>
diff --git a/doc/classes/ParticlesMaterial.xml b/doc/classes/ParticlesMaterial.xml
index 187ad1688d..1f23649b75 100644
--- a/doc/classes/ParticlesMaterial.xml
+++ b/doc/classes/ParticlesMaterial.xml
@@ -321,5 +321,8 @@
<constant name="EMISSION_SHAPE_DIRECTED_POINTS" value="4" enum="EmissionShape">
Particles will be emitted at a position determined by sampling a random point on the [member emission_point_texture]. Particle velocity and rotation will be set based on [member emission_normal_texture]. Particle color will be modulated by [member emission_color_texture].
</constant>
+ <constant name="EMISSION_SHAPE_MAX" value="5" enum="EmissionShape">
+ Represents the size of the [enum EmissionShape] enum.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/PoolByteArray.xml b/doc/classes/PoolByteArray.xml
index 867f042cd2..83c348f6be 100644
--- a/doc/classes/PoolByteArray.xml
+++ b/doc/classes/PoolByteArray.xml
@@ -78,6 +78,11 @@
<return type="String">
</return>
<description>
+ Returns a hexadecimal representation of this array as a [String].
+ [codeblock]
+ var array = PoolByteArray([11, 46, 255])
+ print(array.hex_encode()) # Prints: 0b2eff
+ [/codeblock]
</description>
</method>
<method name="insert">
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 1e714d92c2..221214409f 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -440,8 +440,9 @@
<member name="display/window/vsync/use_vsync" type="bool" setter="" getter="" default="true">
If [code]true[/code], enables vertical synchronization. This eliminates tearing that may appear in moving scenes, at the cost of higher input latency and stuttering at lower framerates. If [code]false[/code], vertical synchronization will be disabled, however, many platforms will enforce it regardless (such as mobile platforms and HTML5).
</member>
- <member name="display/window/vsync/vsync_via_compositor" type="bool" setter="" getter="" default="true">
+ <member name="display/window/vsync/vsync_via_compositor" type="bool" setter="" getter="" default="false">
If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], enables vertical synchronization via the operating system's window compositor when in windowed mode and the compositor is enabled. This will prevent stutter in certain situations. (Windows only.)
+ [b]Note:[/b] This option is experimental and meant to alleviate stutter experienced by some users. However, some users have experienced a Vsync framerate halving (e.g. from 60 FPS to 30 FPS) when using it.
</member>
<member name="editor/script_templates_search_path" type="String" setter="" getter="" default="&quot;res://script_templates&quot;">
</member>
diff --git a/doc/classes/ShaderMaterial.xml b/doc/classes/ShaderMaterial.xml
index ef355c4417..0f39b703ca 100644
--- a/doc/classes/ShaderMaterial.xml
+++ b/doc/classes/ShaderMaterial.xml
@@ -25,6 +25,7 @@
<argument index="0" name="name" type="String">
</argument>
<description>
+ Returns [code]true[/code] if the property identified by [code]name[/code] can be reverted to a default value.
</description>
</method>
<method name="property_get_revert">
@@ -33,6 +34,7 @@
<argument index="0" name="name" type="String">
</argument>
<description>
+ Returns the default value of the material property with given [code]name[/code].
</description>
</method>
<method name="set_shader_param">
diff --git a/doc/classes/SpriteFrames.xml b/doc/classes/SpriteFrames.xml
index f28192519e..2f2075074c 100644
--- a/doc/classes/SpriteFrames.xml
+++ b/doc/classes/SpriteFrames.xml
@@ -170,6 +170,7 @@
</methods>
<members>
<member name="frames" type="Array" setter="_set_frames" getter="_get_frames">
+ Compatibility property, always equals to an empty array.
</member>
</members>
<constants>
diff --git a/doc/classes/StreamPeerSSL.xml b/doc/classes/StreamPeerSSL.xml
index b34d8d1b25..eea44ef93d 100644
--- a/doc/classes/StreamPeerSSL.xml
+++ b/doc/classes/StreamPeerSSL.xml
@@ -38,6 +38,7 @@
</argument>
<description>
Connects to a peer using an underlying [StreamPeer] [code]stream[/code]. If [code]validate_certs[/code] is [code]true[/code], [StreamPeerSSL] will validate that the certificate presented by the peer matches the [code]for_hostname[/code].
+ [b]Note:[/b] Specifying a custom [code]valid_certificate[/code] is not supported in HTML5 exports due to browsers restrictions.
</description>
</method>
<method name="disconnect_from_stream">
diff --git a/doc/classes/StyleBox.xml b/doc/classes/StyleBox.xml
index 1d873ef0b1..1a11904792 100644
--- a/doc/classes/StyleBox.xml
+++ b/doc/classes/StyleBox.xml
@@ -17,18 +17,22 @@
<argument index="1" name="rect" type="Rect2">
</argument>
<description>
+ Draws this stylebox using a [CanvasItem] with given [RID].
+ You can get a [RID] value using [method Object.get_instance_id] on a [CanvasItem]-derived node.
</description>
</method>
<method name="get_center_size" qualifiers="const">
<return type="Vector2">
</return>
<description>
+ Returns the size of this [StyleBox] without the margins.
</description>
</method>
<method name="get_current_item_drawn" qualifiers="const">
<return type="CanvasItem">
</return>
<description>
+ Returns the [CanvasItem] that handles its [constant CanvasItem.NOTIFICATION_DRAW] or [method CanvasItem._draw] callback at this moment.
</description>
</method>
<method name="get_default_margin" qualifiers="const">
@@ -37,6 +41,7 @@
<argument index="0" name="margin" type="int" enum="Margin">
</argument>
<description>
+ Returns the default value of the specified [enum Margin].
</description>
</method>
<method name="get_margin" qualifiers="const">
@@ -45,7 +50,7 @@
<argument index="0" name="margin" type="int" enum="Margin">
</argument>
<description>
- Returns the content margin offset for the specified margin.
+ Returns the content margin offset for the specified [enum Margin].
Positive values reduce size inwards, unlike [Control]'s margin values.
</description>
</method>
@@ -71,6 +76,7 @@
<argument index="1" name="offset" type="float">
</argument>
<description>
+ Sets the default value of the specified [enum Margin] to given [code]offset[/code] in pixels.
</description>
</method>
<method name="test_mask" qualifiers="const">
diff --git a/doc/classes/Texture3D.xml b/doc/classes/Texture3D.xml
index c11a48137f..aac55710fe 100644
--- a/doc/classes/Texture3D.xml
+++ b/doc/classes/Texture3D.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="Texture3D" inherits="TextureLayered" category="Core" version="3.2">
<brief_description>
+ Texture with 3 dimensions.
</brief_description>
<description>
+ Texture3D is a 3-dimensional texture that has a width, height, and depth.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/Thread.xml b/doc/classes/Thread.xml
index 25e40d4c1f..e56ea2325e 100644
--- a/doc/classes/Thread.xml
+++ b/doc/classes/Thread.xml
@@ -50,10 +50,13 @@
</methods>
<constants>
<constant name="PRIORITY_LOW" value="0" enum="Priority">
+ A thread running with lower priority than normally.
</constant>
<constant name="PRIORITY_NORMAL" value="1" enum="Priority">
+ A thread with a standard priority.
</constant>
<constant name="PRIORITY_HIGH" value="2" enum="Priority">
+ A thread running with higher priority than normally.
</constant>
</constants>
</class>
diff --git a/doc/classes/VideoPlayer.xml b/doc/classes/VideoPlayer.xml
index 804489f7f1..3ed53aa447 100644
--- a/doc/classes/VideoPlayer.xml
+++ b/doc/classes/VideoPlayer.xml
@@ -13,7 +13,7 @@
<return type="String">
</return>
<description>
- Returns the video stream's name.
+ Returns the video stream's name, or [code]"&lt;No Stream&gt;"[/code] if no video stream is assigned.
</description>
</method>
<method name="get_video_texture" qualifiers="const">
@@ -28,20 +28,22 @@
</return>
<description>
Returns [code]true[/code] if the video is playing.
+ [b]Note:[/b] The video is still considered playing if paused during playback.
</description>
</method>
<method name="play">
<return type="void">
</return>
<description>
- Starts the video playback.
+ Starts the video playback from the beginning. If the video is paused, this will not unpause the video.
</description>
</method>
<method name="stop">
<return type="void">
</return>
<description>
- Stops the video playback.
+ Stops the video playback and sets the stream position to 0.
+ [b]Note:[/b] Although the stream position will be set to 0, the first frame of the video stream won't become the current frame.
</description>
</method>
</methods>
diff --git a/doc/classes/VisualInstance.xml b/doc/classes/VisualInstance.xml
index 7576bf7ad8..692e051674 100644
--- a/doc/classes/VisualInstance.xml
+++ b/doc/classes/VisualInstance.xml
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="VisualInstance" inherits="Spatial" category="Core" version="3.2">
<brief_description>
+ Parent of all visual 3D nodes.
</brief_description>
<description>
+ The VisualInstance is used to connect a resource to a visual representation. All visual 3D nodes inherit from the VisualInstance. In general, you should not access the VisualInstance properties directly as they are accessed and managed by the nodes that inherit from VisualInstance. VisualInstance is the node representation of the [VisualServer] instance.
</description>
<tutorials>
</tutorials>
@@ -18,12 +20,14 @@
<return type="RID">
</return>
<description>
+ Returns the RID of the resource associated with this VisualInstance. For example, if the Node is a [MeshInstance], this will return the RID of the associated [Mesh].
</description>
</method>
<method name="get_instance" qualifiers="const">
<return type="RID">
</return>
<description>
+ Returns the RID of this instance. This RID is the same as the RID returned by [method VisualServer.instance_create]. This RID is needed if you want to call [VisualServer] functions directly on this VisualInstance.
</description>
</method>
<method name="get_layer_mask_bit" qualifiers="const">
@@ -32,6 +36,7 @@
<argument index="0" name="layer" type="int">
</argument>
<description>
+ Returns [code]true[/code] when the specified layer is enabled in [member layers] and [code]false[/code] otherwise.
</description>
</method>
<method name="get_transformed_aabb" qualifiers="const">
@@ -48,8 +53,7 @@
<argument index="0" name="base" type="RID">
</argument>
<description>
- Sets the base of the VisualInstance, which changes how the engine handles the VisualInstance under the hood.
- It is recommended to only use [method set_base] if you know what you're doing.
+ Sets the resource that is instantiated by this VisualInstance, which changes how the engine handles the VisualInstance under the hood. Equivalent to [method VisualServer.instance_set_base].
</description>
</method>
<method name="set_layer_mask_bit">
@@ -60,6 +64,7 @@
<argument index="1" name="enabled" type="bool">
</argument>
<description>
+ Enables a particular layer in [member layers].
</description>
</method>
</methods>
diff --git a/doc/classes/X509Certificate.xml b/doc/classes/X509Certificate.xml
index 50e9e4e0d4..5f3e91c4e6 100644
--- a/doc/classes/X509Certificate.xml
+++ b/doc/classes/X509Certificate.xml
@@ -6,6 +6,7 @@
<description>
The X509Certificate class represents an X509 certificate. Certificates can be loaded and saved like any other [Resource].
They can be used as the server certificate in [method StreamPeerSSL.accept_stream] (along with the proper [CryptoKey]), and to specify the only certificate that should be accepted when connecting to an SSL server via [method StreamPeerSSL.connect_to_stream].
+ [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/bool.xml b/doc/classes/bool.xml
index 533963b460..ba6a932d4f 100644
--- a/doc/classes/bool.xml
+++ b/doc/classes/bool.xml
@@ -4,7 +4,38 @@
Boolean built-in type.
</brief_description>
<description>
- Boolean built-in type.
+ Boolean is a built-in type. It can represent any data type that is either a true or false value. You can think of it as an switch with on or off (1 or 0) setting . It's often used as part of programming logic in condition statements like [code]if[/code] statements.
+ [b]Note:[/b] In a code below [code]if can_shoot[/code] is equivalent of [code]if can_shoot == true[/code]. It is good practice to follow the natural spoken language structure when possible. Use [code]if can_shoot[/code] rather than [code]if can_shoot == true[/code] and use [code]if not can_shoot[/code] rather than [code]if can_shoot == false[/code].
+ [codeblock]
+ var can_shoot = true
+
+ func shoot():
+ if can_shoot:
+ # Perform shooting actions here.
+ [/codeblock]
+ The following code will only create a bullet if both conditions are met: action "shoot" is pressed and if [code]can_shoot[/code] is [code]true[/code].
+ [b]Note:[/b] [code]Input.is_action_pressed("shoot")[/code] is also a boolean that is [code]true[/code] when "shoot" is pressed and [code]false[/code] when "shoot" isn't pressed.
+ [codeblock]
+ var can_shoot = true
+
+ func shoot():
+ if can_shoot and Input.is_action_pressed("shoot"):
+ create_bullet()
+ [/codeblock]
+ The following code will set [code]can_shoot[/code] to [code]false[/code] and start a timer. This will prevent player from shooting until the timer runs out. Next [code]can_shoot[/code] will be set to [code]true[/code] again allowing player to shoot once again.
+ [codeblock]
+ var can_shoot = true
+ onready var cool_down = $CoolDownTimer
+
+ func shoot():
+ if can_shoot and Input.is_action_pressed("shoot"):
+ create_bullet()
+ can_shoot = false
+ cool_down.start()
+
+ func _on_CoolDownTimer_timeout():
+ can_shoot = true
+ [/codeblock]
</description>
<tutorials>
</tutorials>
diff --git a/doc/tools/makerst.py b/doc/tools/makerst.py
index 91240e9550..4b07bf00ee 100755
--- a/doc/tools/makerst.py
+++ b/doc/tools/makerst.py
@@ -393,15 +393,22 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
f.write(make_type(child, state))
f.write("\n\n")
- # Category
- if class_def.category is not None:
- f.write('**Category:** ' + class_def.category.strip() + "\n\n")
-
# Brief description
- f.write(make_heading('Brief Description', '-'))
if class_def.brief_description is not None:
f.write(rstize_text(class_def.brief_description.strip(), state) + "\n\n")
+ # Class description
+ if class_def.description is not None and class_def.description.strip() != '':
+ f.write(make_heading('Description', '-'))
+ f.write(rstize_text(class_def.description.strip(), state) + "\n\n")
+
+ # Online tutorials
+ if len(class_def.tutorials) > 0:
+ f.write(make_heading('Tutorials', '-'))
+ for t in class_def.tutorials:
+ link = t.strip()
+ f.write("- " + make_url(link) + "\n\n")
+
# Properties overview
if len(class_def.properties) > 0:
f.write(make_heading('Properties', '-'))
@@ -494,18 +501,6 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S
f.write('\n\n')
- # Class description
- if class_def.description is not None and class_def.description.strip() != '':
- f.write(make_heading('Description', '-'))
- f.write(rstize_text(class_def.description.strip(), state) + "\n\n")
-
- # Online tutorials
- if len(class_def.tutorials) > 0:
- f.write(make_heading('Tutorials', '-'))
- for t in class_def.tutorials:
- link = t.strip()
- f.write("- " + make_url(link) + "\n\n")
-
# Property descriptions
if any(not p.overridden for p in class_def.properties.values()) > 0:
f.write(make_heading('Property Descriptions', '-'))
diff --git a/drivers/gles2/rasterizer_scene_gles2.cpp b/drivers/gles2/rasterizer_scene_gles2.cpp
index 5c52d88cc7..6b1574bbbd 100644
--- a/drivers/gles2/rasterizer_scene_gles2.cpp
+++ b/drivers/gles2/rasterizer_scene_gles2.cpp
@@ -1169,7 +1169,7 @@ void RasterizerSceneGLES2::_add_geometry_with_material(RasterizerStorageGLES2::G
LightInstance *li = light_instance_owner.getornull(e->instance->light_instances[i]);
- if (li->light_index >= render_light_instance_count || render_light_instances[li->light_index] != li) {
+ if (!li || li->light_index >= render_light_instance_count || render_light_instances[li->light_index] != li) {
continue; // too many or light_index did not correspond to the light instances to be rendered
}
@@ -3325,6 +3325,7 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const
glDepthMask(GL_TRUE);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
+ glClear(GL_DEPTH_BUFFER_BIT);
// clear color
@@ -3351,13 +3352,12 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const
if (!env || env->bg_mode != VS::ENV_BG_KEEP) {
glClearColor(clear_color.r, clear_color.g, clear_color.b, clear_color.a);
+ glClear(GL_COLOR_BUFFER_BIT);
}
state.default_ambient = Color(clear_color.r, clear_color.g, clear_color.b, 1.0);
state.default_bg = Color(clear_color.r, clear_color.g, clear_color.b, 1.0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
if (storage->frame.current_rt && storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_DIRECT_TO_SCREEN]) {
glDisable(GL_SCISSOR_TEST);
}
diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp
index bb087a7f47..7980c43517 100644
--- a/drivers/gles2/rasterizer_storage_gles2.cpp
+++ b/drivers/gles2/rasterizer_storage_gles2.cpp
@@ -109,6 +109,7 @@ PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC glFramebufferTexture2DMultisampleEXT
#define glFramebufferTexture2DMultisample glFramebufferTexture2DMultisampleANGLE
#endif
+#define GL_TEXTURE_3D 0x806F
#define GL_MAX_SAMPLES 0x8D57
#endif //!GLES_OVER_GL
@@ -565,11 +566,11 @@ void RasterizerStorageGLES2::texture_allocate(RID p_texture, int p_width, int p_
texture->target = GL_TEXTURE_CUBE_MAP;
texture->images.resize(6);
} break;
- case VS::TEXTURE_TYPE_2D_ARRAY: {
- texture->images.resize(p_depth_3d);
- } break;
+ case VS::TEXTURE_TYPE_2D_ARRAY:
case VS::TEXTURE_TYPE_3D: {
- texture->images.resize(p_depth_3d);
+ texture->target = GL_TEXTURE_3D;
+ ERR_PRINT("3D textures and Texture Arrays are not supported in GLES2. Please switch to the GLES3 backend.");
+ return;
} break;
default: {
ERR_PRINT("Unknown texture type!");
@@ -626,6 +627,10 @@ void RasterizerStorageGLES2::texture_set_data(RID p_texture, const Ref<Image> &p
Texture *texture = texture_owner.getornull(p_texture);
ERR_FAIL_COND(!texture);
+ if (texture->target == GL_TEXTURE_3D) {
+ // Target is set to a 3D texture or array texture, exit early to avoid spamming errors
+ return;
+ }
ERR_FAIL_COND(!texture->active);
ERR_FAIL_COND(texture->render_target);
ERR_FAIL_COND(texture->format != p_image->get_format());
@@ -2862,20 +2867,20 @@ void RasterizerStorageGLES2::multimesh_allocate(RID p_multimesh, int p_instances
multimesh->xform_floats = 12;
}
- if (multimesh->color_format == VS::MULTIMESH_COLOR_NONE) {
- multimesh->color_floats = 0;
- } else if (multimesh->color_format == VS::MULTIMESH_COLOR_8BIT) {
+ if (multimesh->color_format == VS::MULTIMESH_COLOR_8BIT) {
multimesh->color_floats = 1;
} else if (multimesh->color_format == VS::MULTIMESH_COLOR_FLOAT) {
multimesh->color_floats = 4;
+ } else {
+ multimesh->color_floats = 0;
}
- if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_NONE) {
- multimesh->custom_data_floats = 0;
- } else if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_8BIT) {
+ if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_8BIT) {
multimesh->custom_data_floats = 1;
} else if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_FLOAT) {
multimesh->custom_data_floats = 4;
+ } else {
+ multimesh->custom_data_floats = 0;
}
int format_floats = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
@@ -3051,6 +3056,7 @@ void RasterizerStorageGLES2::multimesh_instance_set_color(RID p_multimesh, int p
ERR_FAIL_COND(!multimesh);
ERR_FAIL_INDEX(p_index, multimesh->size);
ERR_FAIL_COND(multimesh->color_format == VS::MULTIMESH_COLOR_NONE);
+ ERR_FAIL_INDEX(multimesh->color_format, VS::MULTIMESH_COLOR_MAX);
int stride = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
float *dataptr = &multimesh->data.write[stride * p_index + multimesh->xform_floats];
@@ -3083,6 +3089,7 @@ void RasterizerStorageGLES2::multimesh_instance_set_custom_data(RID p_multimesh,
ERR_FAIL_COND(!multimesh);
ERR_FAIL_INDEX(p_index, multimesh->size);
ERR_FAIL_COND(multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_NONE);
+ ERR_FAIL_INDEX(multimesh->custom_data_format, VS::MULTIMESH_CUSTOM_DATA_MAX);
int stride = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
float *dataptr = &multimesh->data.write[stride * p_index + multimesh->xform_floats + multimesh->color_floats];
@@ -3170,6 +3177,7 @@ Color RasterizerStorageGLES2::multimesh_instance_get_color(RID p_multimesh, int
ERR_FAIL_COND_V(!multimesh, Color());
ERR_FAIL_INDEX_V(p_index, multimesh->size, Color());
ERR_FAIL_COND_V(multimesh->color_format == VS::MULTIMESH_COLOR_NONE, Color());
+ ERR_FAIL_INDEX_V(multimesh->color_format, VS::MULTIMESH_COLOR_MAX, Color());
int stride = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
float *dataptr = &multimesh->data.write[stride * p_index + multimesh->xform_floats];
@@ -3202,6 +3210,7 @@ Color RasterizerStorageGLES2::multimesh_instance_get_custom_data(RID p_multimesh
ERR_FAIL_COND_V(!multimesh, Color());
ERR_FAIL_INDEX_V(p_index, multimesh->size, Color());
ERR_FAIL_COND_V(multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_NONE, Color());
+ ERR_FAIL_INDEX_V(multimesh->custom_data_format, VS::MULTIMESH_CUSTOM_DATA_MAX, Color());
int stride = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
float *dataptr = &multimesh->data.write[stride * p_index + multimesh->xform_floats + multimesh->color_floats];
diff --git a/drivers/gles2/shader_compiler_gles2.cpp b/drivers/gles2/shader_compiler_gles2.cpp
index fc59486090..24b89aedc2 100644
--- a/drivers/gles2/shader_compiler_gles2.cpp
+++ b/drivers/gles2/shader_compiler_gles2.cpp
@@ -522,9 +522,6 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener
SL::ArrayDeclarationNode *arr_dec_node = (SL::ArrayDeclarationNode *)p_node;
StringBuffer<> declaration;
- if (arr_dec_node->is_const) {
- declaration += "const ";
- }
declaration += _prestr(arr_dec_node->precision);
declaration += _typestr(arr_dec_node->datatype);
@@ -540,22 +537,6 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener
declaration += "[";
declaration += itos(arr_dec_node->declarations[i].size);
declaration += "]";
- int sz = arr_dec_node->declarations[i].initializer.size();
- if (sz > 0) {
- declaration += "=";
- declaration += _typestr(arr_dec_node->datatype);
- declaration += "[";
- declaration += itos(sz);
- declaration += "]";
- declaration += "(";
- for (int j = 0; j < sz; j++) {
- declaration += _dump_node_code(arr_dec_node->declarations[i].initializer[j], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
- if (j != sz - 1) {
- declaration += ", ";
- }
- }
- declaration += ")";
- }
}
code += declaration.as_string();
diff --git a/drivers/gles2/shaders/scene.glsl b/drivers/gles2/shaders/scene.glsl
index 63eee4eb87..ac7a8796a3 100644
--- a/drivers/gles2/shaders/scene.glsl
+++ b/drivers/gles2/shaders/scene.glsl
@@ -1666,19 +1666,19 @@ FRAGMENT_SHADER_CODE
#ifdef USE_LIGHTMAP_CAPTURE
{
- vec3 cone_dirs[12] = vec3[](
- vec3(0.0, 0.0, 1.0),
- vec3(0.866025, 0.0, 0.5),
- vec3(0.267617, 0.823639, 0.5),
- vec3(-0.700629, 0.509037, 0.5),
- vec3(-0.700629, -0.509037, 0.5),
- vec3(0.267617, -0.823639, 0.5),
- vec3(0.0, 0.0, -1.0),
- vec3(0.866025, 0.0, -0.5),
- vec3(0.267617, 0.823639, -0.5),
- vec3(-0.700629, 0.509037, -0.5),
- vec3(-0.700629, -0.509037, -0.5),
- vec3(0.267617, -0.823639, -0.5));
+ vec3 cone_dirs[12];
+ cone_dirs[0] = vec3(0.0, 0.0, 1.0);
+ cone_dirs[1] = vec3(0.866025, 0.0, 0.5);
+ cone_dirs[2] = vec3(0.267617, 0.823639, 0.5);
+ cone_dirs[3] = vec3(-0.700629, 0.509037, 0.5);
+ cone_dirs[4] = vec3(-0.700629, -0.509037, 0.5);
+ cone_dirs[5] = vec3(0.267617, -0.823639, 0.5);
+ cone_dirs[6] = vec3(0.0, 0.0, -1.0);
+ cone_dirs[7] = vec3(0.866025, 0.0, -0.5);
+ cone_dirs[8] = vec3(0.267617, 0.823639, -0.5);
+ cone_dirs[9] = vec3(-0.700629, 0.509037, -0.5);
+ cone_dirs[10] = vec3(-0.700629, -0.509037, -0.5);
+ cone_dirs[11] = vec3(0.267617, -0.823639, -0.5);
vec3 local_normal = normalize(camera_matrix * vec4(normal, 0.0)).xyz;
vec4 captured = vec4(0.0);
diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp
index df11da44f7..b7b31c66aa 100644
--- a/drivers/gles3/rasterizer_canvas_gles3.cpp
+++ b/drivers/gles3/rasterizer_canvas_gles3.cpp
@@ -1012,6 +1012,7 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur
switch (multi_mesh->color_format) {
+ case VS::MULTIMESH_COLOR_MAX:
case VS::MULTIMESH_COLOR_NONE: {
glDisableVertexAttribArray(11);
glVertexAttrib4f(11, 1, 1, 1, 1);
@@ -1033,6 +1034,7 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur
switch (multi_mesh->custom_data_format) {
+ case VS::MULTIMESH_CUSTOM_DATA_MAX:
case VS::MULTIMESH_CUSTOM_DATA_NONE: {
glDisableVertexAttribArray(12);
glVertexAttrib4f(12, 1, 1, 1, 1);
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index 3ee39ede18..0ed2637a11 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -1416,6 +1416,7 @@ void RasterizerSceneGLES3::_setup_geometry(RenderList::Element *e, const Transfo
switch (multi_mesh->color_format) {
+ case VS::MULTIMESH_COLOR_MAX:
case VS::MULTIMESH_COLOR_NONE: {
glDisableVertexAttribArray(11);
glVertexAttrib4f(11, 1, 1, 1, 1);
@@ -1437,6 +1438,7 @@ void RasterizerSceneGLES3::_setup_geometry(RenderList::Element *e, const Transfo
switch (multi_mesh->custom_data_format) {
+ case VS::MULTIMESH_CUSTOM_DATA_MAX:
case VS::MULTIMESH_CUSTOM_DATA_NONE: {
glDisableVertexAttribArray(12);
glVertexAttrib4f(12, 1, 1, 1, 1);
@@ -1887,17 +1889,17 @@ void RasterizerSceneGLES3::_setup_light(RenderList::Element *e, const Transform
const RID *lights = e->instance->light_instances.ptr();
for (int i = 0; i < lc; i++) {
- LightInstance *li = light_instance_owner.getptr(lights[i]);
- if (li->last_pass != render_pass) //not visible
+ LightInstance *li = light_instance_owner.getornull(lights[i]);
+ if (!li || li->last_pass != render_pass) //not visible
continue;
- if (li->light_ptr->type == VS::LIGHT_OMNI) {
+ if (li && li->light_ptr->type == VS::LIGHT_OMNI) {
if (omni_count < maxobj && e->instance->layer_mask & li->light_ptr->cull_mask) {
omni_indices[omni_count++] = li->light_index;
}
}
- if (li->light_ptr->type == VS::LIGHT_SPOT) {
+ if (li && li->light_ptr->type == VS::LIGHT_SPOT) {
if (spot_count < maxobj && e->instance->layer_mask & li->light_ptr->cull_mask) {
spot_indices[spot_count++] = li->light_index;
}
diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp
index c02f17ab95..801763609e 100644
--- a/drivers/gles3/rasterizer_storage_gles3.cpp
+++ b/drivers/gles3/rasterizer_storage_gles3.cpp
@@ -4470,20 +4470,20 @@ void RasterizerStorageGLES3::multimesh_allocate(RID p_multimesh, int p_instances
multimesh->xform_floats = 12;
}
- if (multimesh->color_format == VS::MULTIMESH_COLOR_NONE) {
- multimesh->color_floats = 0;
- } else if (multimesh->color_format == VS::MULTIMESH_COLOR_8BIT) {
+ if (multimesh->color_format == VS::MULTIMESH_COLOR_8BIT) {
multimesh->color_floats = 1;
} else if (multimesh->color_format == VS::MULTIMESH_COLOR_FLOAT) {
multimesh->color_floats = 4;
+ } else {
+ multimesh->color_floats = 0;
}
- if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_NONE) {
- multimesh->custom_data_floats = 0;
- } else if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_8BIT) {
+ if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_8BIT) {
multimesh->custom_data_floats = 1;
} else if (multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_FLOAT) {
multimesh->custom_data_floats = 4;
+ } else {
+ multimesh->custom_data_floats = 0;
}
int format_floats = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
@@ -4679,6 +4679,7 @@ void RasterizerStorageGLES3::multimesh_instance_set_color(RID p_multimesh, int p
ERR_FAIL_COND(!multimesh);
ERR_FAIL_INDEX(p_index, multimesh->size);
ERR_FAIL_COND(multimesh->color_format == VS::MULTIMESH_COLOR_NONE);
+ ERR_FAIL_INDEX(multimesh->color_format, VS::MULTIMESH_COLOR_MAX);
int stride = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
float *dataptr = &multimesh->data.write[stride * p_index + multimesh->xform_floats];
@@ -4712,6 +4713,7 @@ void RasterizerStorageGLES3::multimesh_instance_set_custom_data(RID p_multimesh,
ERR_FAIL_COND(!multimesh);
ERR_FAIL_INDEX(p_index, multimesh->size);
ERR_FAIL_COND(multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_NONE);
+ ERR_FAIL_INDEX(multimesh->custom_data_format, VS::MULTIMESH_CUSTOM_DATA_MAX);
int stride = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
float *dataptr = &multimesh->data.write[stride * p_index + multimesh->xform_floats + multimesh->color_floats];
@@ -4800,6 +4802,7 @@ Color RasterizerStorageGLES3::multimesh_instance_get_color(RID p_multimesh, int
ERR_FAIL_COND_V(!multimesh, Color());
ERR_FAIL_INDEX_V(p_index, multimesh->size, Color());
ERR_FAIL_COND_V(multimesh->color_format == VS::MULTIMESH_COLOR_NONE, Color());
+ ERR_FAIL_INDEX_V(multimesh->color_format, VS::MULTIMESH_COLOR_MAX, Color());
int stride = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
float *dataptr = &multimesh->data.write[stride * p_index + multimesh->xform_floats];
@@ -4833,6 +4836,7 @@ Color RasterizerStorageGLES3::multimesh_instance_get_custom_data(RID p_multimesh
ERR_FAIL_COND_V(!multimesh, Color());
ERR_FAIL_INDEX_V(p_index, multimesh->size, Color());
ERR_FAIL_COND_V(multimesh->custom_data_format == VS::MULTIMESH_CUSTOM_DATA_NONE, Color());
+ ERR_FAIL_INDEX_V(multimesh->custom_data_format, VS::MULTIMESH_CUSTOM_DATA_MAX, Color());
int stride = multimesh->color_floats + multimesh->xform_floats + multimesh->custom_data_floats;
float *dataptr = &multimesh->data.write[stride * p_index + multimesh->xform_floats + multimesh->color_floats];
diff --git a/drivers/gles3/shaders/cubemap_filter.glsl b/drivers/gles3/shaders/cubemap_filter.glsl
index f94ac8c81c..3f3313c3a7 100644
--- a/drivers/gles3/shaders/cubemap_filter.glsl
+++ b/drivers/gles3/shaders/cubemap_filter.glsl
@@ -309,7 +309,7 @@ void main() {
}
st /= vec2(M_PI * 2.0, M_PI);
- irradiance += texture(source_panorama, st, source_mip_level).rgb * cos(theta) * sin(theta);
+ irradiance += textureLod(source_panorama, st, source_mip_level).rgb * cos(theta) * sin(theta);
num_samples++;
}
}
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index fa713349d4..4f684c7bdc 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -1184,7 +1184,7 @@ void CodeTextEditor::move_lines_down() {
void CodeTextEditor::_delete_line(int p_line) {
// this is currently intended to be called within delete_lines()
- // so `begin_complex_operation` is ommitted here
+ // so `begin_complex_operation` is omitted here
text_editor->set_line(p_line, "");
if (p_line == 0 && text_editor->get_line_count() > 1) {
text_editor->cursor_set_line(1);
diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp
index 60058f2f43..1853133bc7 100644
--- a/editor/connections_dialog.cpp
+++ b/editor/connections_dialog.cpp
@@ -127,6 +127,7 @@ void ConnectDialog::ok_pressed() {
}
}
emit_signal("connected");
+ hide();
}
void ConnectDialog::_cancel_pressed() {
@@ -145,7 +146,17 @@ void ConnectDialog::_tree_node_selected() {
return;
dst_path = source->get_path_to(current);
- get_ok()->set_disabled(false);
+ _update_ok_enabled();
+}
+
+/*
+ * Called each time a target node is activated within the target node tree.
+ */
+void ConnectDialog::_tree_item_activated() {
+
+ if (!get_ok()->is_disabled()) {
+ get_ok()->emit_signal("pressed");
+ }
}
/*
@@ -199,6 +210,27 @@ void ConnectDialog::_remove_bind() {
cdbinds->notify_changed();
}
+/*
+ * Enables or disables the connect button. The connect button is enabled if a
+ * node is selected and valid in the selected mode.
+ */
+void ConnectDialog::_update_ok_enabled() {
+
+ Node *target = tree->get_selected();
+
+ if (target == nullptr) {
+ get_ok()->set_disabled(true);
+ return;
+ }
+
+ if (!advanced->is_pressed() && target->get_script().is_null()) {
+ get_ok()->set_disabled(true);
+ return;
+ }
+
+ get_ok()->set_disabled(false);
+}
+
void ConnectDialog::_notification(int p_what) {
if (p_what == NOTIFICATION_ENTER_TREE) {
@@ -211,8 +243,10 @@ void ConnectDialog::_bind_methods() {
ClassDB::bind_method("_advanced_pressed", &ConnectDialog::_advanced_pressed);
ClassDB::bind_method("_cancel", &ConnectDialog::_cancel_pressed);
ClassDB::bind_method("_tree_node_selected", &ConnectDialog::_tree_node_selected);
+ ClassDB::bind_method("_tree_item_activated", &ConnectDialog::_tree_item_activated);
ClassDB::bind_method("_add_bind", &ConnectDialog::_add_bind);
ClassDB::bind_method("_remove_bind", &ConnectDialog::_remove_bind);
+ ClassDB::bind_method("_update_ok_enabled", &ConnectDialog::_update_ok_enabled);
ADD_SIGNAL(MethodInfo("connected"));
}
@@ -280,6 +314,8 @@ bool ConnectDialog::is_editing() const {
*/
void ConnectDialog::init(Connection c, bool bEdit) {
+ set_hide_on_ok(false);
+
source = static_cast<Node *>(c.source);
signal = c.signal;
@@ -287,13 +323,12 @@ void ConnectDialog::init(Connection c, bool bEdit) {
tree->set_marked(source, true);
if (c.target) {
- get_ok()->set_disabled(false);
set_dst_node(static_cast<Node *>(c.target));
set_dst_method(c.method);
- } else {
- get_ok()->set_disabled(true);
}
+ _update_ok_enabled();
+
bool bDeferred = (c.flags & CONNECT_DEFERRED) == CONNECT_DEFERRED;
bool bOneshot = (c.flags & CONNECT_ONESHOT) == CONNECT_ONESHOT;
@@ -336,6 +371,8 @@ void ConnectDialog::_advanced_pressed() {
error_label->set_visible(!_find_first_script(get_tree()->get_edited_scene_root(), get_tree()->get_edited_scene_root()));
}
+ _update_ok_enabled();
+
set_position((get_viewport_rect().size - get_custom_minimum_size()) / 2);
}
@@ -360,7 +397,7 @@ ConnectDialog::ConnectDialog() {
tree = memnew(SceneTreeEditor(false));
tree->set_connecting_signal(true);
- tree->get_scene_tree()->connect("item_activated", this, "_ok");
+ tree->get_scene_tree()->connect("item_activated", this, "_tree_item_activated");
tree->connect("node_selected", this, "_tree_node_selected");
tree->set_connect_to_script_mode(true);
diff --git a/editor/connections_dialog.h b/editor/connections_dialog.h
index 8ef4eddea1..c30413953a 100644
--- a/editor/connections_dialog.h
+++ b/editor/connections_dialog.h
@@ -76,9 +76,11 @@ class ConnectDialog : public ConfirmationDialog {
void ok_pressed();
void _cancel_pressed();
void _tree_node_selected();
+ void _tree_item_activated();
void _add_bind();
void _remove_bind();
void _advanced_pressed();
+ void _update_ok_enabled();
protected:
void _notification(int p_what);
diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp
index 365238222f..3f773c646a 100644
--- a/editor/editor_audio_buses.cpp
+++ b/editor/editor_audio_buses.cpp
@@ -1249,7 +1249,7 @@ void EditorAudioBuses::_load_default_layout() {
String layout_path = ProjectSettings::get_singleton()->get("audio/default_bus_layout");
- Ref<AudioBusLayout> state = ResourceLoader::load(layout_path);
+ Ref<AudioBusLayout> state = ResourceLoader::load(layout_path, "", true);
if (state.is_null()) {
EditorNode::get_singleton()->show_warning(vformat(TTR("There is no '%s' file."), layout_path));
return;
@@ -1266,7 +1266,7 @@ void EditorAudioBuses::_load_default_layout() {
void EditorAudioBuses::_file_dialog_callback(const String &p_string) {
if (file_dialog->get_mode() == EditorFileDialog::MODE_OPEN_FILE) {
- Ref<AudioBusLayout> state = ResourceLoader::load(p_string);
+ Ref<AudioBusLayout> state = ResourceLoader::load(p_string, "", true);
if (state.is_null()) {
EditorNode::get_singleton()->show_warning(TTR("Invalid file, not an audio bus layout."));
return;
@@ -1404,7 +1404,7 @@ void EditorAudioBuses::open_layout(const String &p_path) {
EditorNode::get_singleton()->make_bottom_panel_item_visible(this);
- Ref<AudioBusLayout> state = ResourceLoader::load(p_path);
+ Ref<AudioBusLayout> state = ResourceLoader::load(p_path, "", true);
if (state.is_null()) {
EditorNode::get_singleton()->show_warning(TTR("Invalid file, not an audio bus layout."));
return;
diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp
index a0c106441a..d3c50423b7 100644
--- a/editor/editor_help.cpp
+++ b/editor/editor_help.cpp
@@ -418,10 +418,10 @@ void EditorHelp::_update_doc() {
}
}
- if (found)
+ if (found) {
class_desc->pop();
-
- class_desc->add_newline();
+ class_desc->add_newline();
+ }
}
class_desc->add_newline();
@@ -430,9 +430,26 @@ void EditorHelp::_update_doc() {
// Brief description
if (cd.brief_description != "") {
+ class_desc->push_color(text_color);
+ class_desc->push_font(doc_bold_font);
+ class_desc->push_indent(1);
+ _add_text(cd.brief_description);
+ class_desc->pop();
+ class_desc->pop();
+ class_desc->pop();
+ class_desc->add_newline();
+ class_desc->add_newline();
+ class_desc->add_newline();
+ }
+
+ // Class description
+ if (cd.description != "") {
+
+ section_line.push_back(Pair<String, int>(TTR("Description"), class_desc->get_line_count() - 2));
+ description_line = class_desc->get_line_count() - 2;
class_desc->push_color(title_color);
class_desc->push_font(doc_title_font);
- class_desc->add_text(TTR("Brief Description"));
+ class_desc->add_text(TTR("Description"));
class_desc->pop();
class_desc->pop();
@@ -441,11 +458,51 @@ void EditorHelp::_update_doc() {
class_desc->push_color(text_color);
class_desc->push_font(doc_font);
class_desc->push_indent(1);
- _add_text(cd.brief_description);
+ _add_text(cd.description);
+ class_desc->pop();
class_desc->pop();
class_desc->pop();
+ class_desc->add_newline();
+ class_desc->add_newline();
+ class_desc->add_newline();
+ }
+
+ // Online tutorials
+ {
+ class_desc->push_color(title_color);
+ class_desc->push_font(doc_title_font);
+ class_desc->add_text(TTR("Online Tutorials"));
+ class_desc->pop();
class_desc->pop();
+ class_desc->push_indent(1);
+
+ class_desc->push_font(doc_code_font);
+
class_desc->add_newline();
+ // class_desc->add_newline();
+
+ if (cd.tutorials.size() != 0) {
+
+ for (int i = 0; i < cd.tutorials.size(); i++) {
+ String link = cd.tutorials[i];
+ String linktxt = link;
+ int seppos = linktxt.find("//");
+ if (seppos != -1) {
+ linktxt = link.right(seppos + 2);
+ }
+
+ class_desc->push_color(symbol_color);
+ class_desc->append_bbcode("[url=" + link + "]" + linktxt + "[/url]");
+ class_desc->pop();
+ class_desc->add_newline();
+ }
+ } else {
+ class_desc->push_color(comment_color);
+ class_desc->append_bbcode(TTR("There are currently no tutorials for this class, you can [color=$color][url=$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/url][/color].").replace("$url2", REQUEST_URL).replace("$url", CONTRIBUTE2_URL).replace("$color", link_color_text));
+ class_desc->pop();
+ }
+ class_desc->pop();
+ class_desc->pop();
class_desc->add_newline();
class_desc->add_newline();
}
@@ -516,7 +573,7 @@ void EditorHelp::_update_doc() {
if (cd.properties[i].default_value != "") {
class_desc->push_color(symbol_color);
- class_desc->add_text(cd.properties[i].overridden ? " [override: " : " [default: ");
+ class_desc->add_text(cd.properties[i].overridden ? " [" + TTR("override:") + " " : " [" + TTR("default:") + " ");
class_desc->pop();
class_desc->push_color(value_color);
_add_text(_fix_constant(cd.properties[i].default_value));
@@ -546,8 +603,11 @@ void EditorHelp::_update_doc() {
Vector<DocData::MethodDoc> methods;
for (int i = 0; i < cd.methods.size(); i++) {
- if (skip_methods.has(cd.methods[i].name))
- continue;
+ if (skip_methods.has(cd.methods[i].name)) {
+ if (cd.methods[i].arguments.size() == 0 /* getter */ || (cd.methods[i].arguments.size() == 1 && cd.methods[i].return_type == "void" /* setter */)) {
+ continue;
+ }
+ }
methods.push_back(cd.methods[i]);
}
@@ -658,7 +718,7 @@ void EditorHelp::_update_doc() {
if (cd.theme_properties[i].default_value != "") {
class_desc->push_color(symbol_color);
- class_desc->add_text(" [default: ");
+ class_desc->add_text(" [" + TTR("default:") + " ");
class_desc->pop();
class_desc->push_color(value_color);
_add_text(_fix_constant(cd.theme_properties[i].default_value));
@@ -795,7 +855,7 @@ void EditorHelp::_update_doc() {
enum_line[E->key()] = class_desc->get_line_count() - 2;
class_desc->push_color(title_color);
- class_desc->add_text(TTR("enum "));
+ class_desc->add_text("enum ");
class_desc->pop();
class_desc->push_font(doc_code_font);
String e = E->key();
@@ -922,71 +982,6 @@ void EditorHelp::_update_doc() {
}
}
- // Class description
- if (cd.description != "") {
-
- section_line.push_back(Pair<String, int>(TTR("Class Description"), class_desc->get_line_count() - 2));
- description_line = class_desc->get_line_count() - 2;
- class_desc->push_color(title_color);
- class_desc->push_font(doc_title_font);
- class_desc->add_text(TTR("Class Description"));
- class_desc->pop();
- class_desc->pop();
-
- class_desc->add_newline();
- class_desc->add_newline();
- class_desc->push_color(text_color);
- class_desc->push_font(doc_font);
- class_desc->push_indent(1);
- _add_text(cd.description);
- class_desc->pop();
- class_desc->pop();
- class_desc->pop();
- class_desc->add_newline();
- class_desc->add_newline();
- class_desc->add_newline();
- }
-
- // Online tutorials
- {
- class_desc->push_color(title_color);
- class_desc->push_font(doc_title_font);
- class_desc->add_text(TTR("Online Tutorials"));
- class_desc->pop();
- class_desc->pop();
- class_desc->push_indent(1);
-
- class_desc->push_font(doc_code_font);
-
- class_desc->add_newline();
- // class_desc->add_newline();
-
- if (cd.tutorials.size() != 0) {
-
- for (int i = 0; i < cd.tutorials.size(); i++) {
- String link = cd.tutorials[i];
- String linktxt = link;
- int seppos = linktxt.find("//");
- if (seppos != -1) {
- linktxt = link.right(seppos + 2);
- }
-
- class_desc->push_color(symbol_color);
- class_desc->append_bbcode("[url=" + link + "]" + linktxt + "[/url]");
- class_desc->pop();
- class_desc->add_newline();
- }
- } else {
- class_desc->push_color(comment_color);
- class_desc->append_bbcode(TTR("There are currently no tutorials for this class, you can [color=$color][url=$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/url][/color].").replace("$url2", REQUEST_URL).replace("$url", CONTRIBUTE2_URL).replace("$color", link_color_text));
- class_desc->pop();
- }
- class_desc->pop();
- class_desc->pop();
- class_desc->add_newline();
- class_desc->add_newline();
- }
-
// Property descriptions
if (property_descr) {
@@ -1025,7 +1020,7 @@ void EditorHelp::_update_doc() {
if (cd.properties[i].default_value != "") {
class_desc->push_color(symbol_color);
- class_desc->add_text(" [default: ");
+ class_desc->add_text(" [" + TTR("default:") + " ");
class_desc->pop(); // color
class_desc->push_color(value_color);
@@ -1048,7 +1043,7 @@ void EditorHelp::_update_doc() {
class_desc->push_cell();
class_desc->push_font(doc_code_font);
class_desc->push_color(text_color);
- class_desc->add_text(cd.properties[i].setter + "(value)");
+ class_desc->add_text(cd.properties[i].setter + TTR("(value)"));
class_desc->pop(); // color
class_desc->push_color(comment_color);
class_desc->add_text(" setter");
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 0be0ea90a3..c5b67eb971 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -369,6 +369,19 @@ void EditorNode::_notification(int p_what) {
case NOTIFICATION_READY: {
+ {
+ _initializing_addons = true;
+ Vector<String> addons;
+ if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) {
+ addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled");
+ }
+
+ for (int i = 0; i < addons.size(); i++) {
+ set_addon_plugin_enabled(addons[i], true);
+ }
+ _initializing_addons = false;
+ }
+
VisualServer::get_singleton()->viewport_set_hide_scenario(get_scene_root()->get_viewport_rid(), true);
VisualServer::get_singleton()->viewport_set_hide_canvas(get_scene_root()->get_viewport_rid(), true);
VisualServer::get_singleton()->viewport_set_disable_environment(get_viewport()->get_viewport_rid(), true);
@@ -660,12 +673,14 @@ void EditorNode::_sources_changed(bool p_exist) {
if (waiting_for_first_scan) {
waiting_for_first_scan = false;
- EditorResourcePreview::get_singleton()->start(); //start previes now that it's safe
+ // Start preview thread now that it's safe.
+ if (!singleton->cmdline_export_mode) {
+ EditorResourcePreview::get_singleton()->start();
+ }
_load_docks();
if (defer_load_scene != "") {
-
load_scene(defer_load_scene);
defer_load_scene = "";
}
@@ -1155,7 +1170,10 @@ void EditorNode::_save_scene_with_preview(String p_file, int p_idx) {
save.step(TTR("Saving Scene"), 4);
_save_scene(p_file, p_idx);
- EditorResourcePreview::get_singleton()->check_for_invalidation(p_file);
+
+ if (!singleton->cmdline_export_mode) {
+ EditorResourcePreview::get_singleton()->check_for_invalidation(p_file);
+ }
}
bool EditorNode::_validate_scene_recursive(const String &p_filename, Node *p_node) {
@@ -3839,7 +3857,7 @@ Ref<Texture> EditorNode::get_class_icon(const String &p_class, const String &p_f
void EditorNode::progress_add_task(const String &p_task, const String &p_label, int p_steps, bool p_can_cancel) {
- if (singleton->disable_progress_dialog) {
+ if (singleton->cmdline_export_mode) {
print_line(p_task + ": begin: " + p_label + " steps: " + itos(p_steps));
} else {
singleton->progress_dialog->add_task(p_task, p_label, p_steps, p_can_cancel);
@@ -3848,7 +3866,7 @@ void EditorNode::progress_add_task(const String &p_task, const String &p_label,
bool EditorNode::progress_task_step(const String &p_task, const String &p_state, int p_step, bool p_force_refresh) {
- if (singleton->disable_progress_dialog) {
+ if (singleton->cmdline_export_mode) {
print_line("\t" + p_task + ": step " + itos(p_step) + ": " + p_state);
return false;
} else {
@@ -3859,7 +3877,7 @@ bool EditorNode::progress_task_step(const String &p_task, const String &p_state,
void EditorNode::progress_end_task(const String &p_task) {
- if (singleton->disable_progress_dialog) {
+ if (singleton->cmdline_export_mode) {
print_line(p_task + ": end");
} else {
singleton->progress_dialog->end_task(p_task);
@@ -3945,7 +3963,7 @@ Error EditorNode::export_preset(const String &p_preset, const String &p_path, bo
export_defer.path = p_path;
export_defer.debug = p_debug;
export_defer.pack_only = p_pack_only;
- disable_progress_dialog = true;
+ cmdline_export_mode = true;
return OK;
}
@@ -5079,6 +5097,7 @@ void EditorNode::_global_menu_action(const Variant &p_id, const Variant &p_meta)
if (id == GLOBAL_NEW_WINDOW) {
if (OS::get_singleton()->get_main_loop()) {
List<String> args;
+ args.push_back("-e");
String exec = OS::get_singleton()->get_executable_path();
OS::ProcessID pid = 0;
@@ -5586,7 +5605,7 @@ EditorNode::EditorNode() {
_initializing_addons = false;
docks_visible = true;
restoring_scenes = false;
- disable_progress_dialog = false;
+ cmdline_export_mode = false;
scene_distraction = false;
script_distraction = false;
@@ -6775,19 +6794,6 @@ EditorNode::EditorNode() {
import_dock->initialize_import_options();
- {
- _initializing_addons = true;
- Vector<String> addons;
- if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) {
- addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled");
- }
-
- for (int i = 0; i < addons.size(); i++) {
- set_addon_plugin_enabled(addons[i], true);
- }
- _initializing_addons = false;
- }
-
FileAccess::set_file_close_fail_notify_callback(_file_access_close_error_notify);
waiting_for_first_scan = true;
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 7f53f77c76..a5c04d3531 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -561,7 +561,7 @@ private:
bool pack_only;
} export_defer;
- bool disable_progress_dialog;
+ bool cmdline_export_mode;
static EditorNode *singleton;
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index c049096c35..c134786b89 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -805,10 +805,10 @@ EditorPropertyLayers::EditorPropertyLayers() {
///////////////////// INT /////////////////////////
-void EditorPropertyInteger::_value_changed(double val) {
+void EditorPropertyInteger::_value_changed(int64_t val) {
if (setting)
return;
- emit_changed(get_edited_property(), (int64_t)val);
+ emit_changed(get_edited_property(), val);
}
void EditorPropertyInteger::update_property() {
@@ -816,14 +816,19 @@ void EditorPropertyInteger::update_property() {
setting = true;
spin->set_value(val);
setting = false;
+#ifdef DEBUG_ENABLED
+ // If spin (currently EditorSplinSlider : Range) is changed so that it can use int64_t, then the below warning wouldn't be a problem.
+ if (val != (int64_t)(double)(val)) {
+ WARN_PRINT("Cannot reliably represent '" + itos(val) + "' in the inspector, value is too large.");
+ }
+#endif
}
void EditorPropertyInteger::_bind_methods() {
-
ClassDB::bind_method(D_METHOD("_value_changed"), &EditorPropertyInteger::_value_changed);
}
-void EditorPropertyInteger::setup(int p_min, int p_max, int p_step, bool p_allow_greater, bool p_allow_lesser) {
+void EditorPropertyInteger::setup(int64_t p_min, int64_t p_max, int64_t p_step, bool p_allow_greater, bool p_allow_lesser) {
spin->set_min(p_min);
spin->set_max(p_max);
spin->set_step(p_step);
diff --git a/editor/editor_properties.h b/editor/editor_properties.h
index 4c7358597e..1853a6b6e1 100644
--- a/editor/editor_properties.h
+++ b/editor/editor_properties.h
@@ -263,14 +263,14 @@ class EditorPropertyInteger : public EditorProperty {
GDCLASS(EditorPropertyInteger, EditorProperty);
EditorSpinSlider *spin;
bool setting;
- void _value_changed(double p_val);
+ void _value_changed(int64_t p_val);
protected:
static void _bind_methods();
public:
virtual void update_property();
- void setup(int p_min, int p_max, int p_step, bool p_allow_greater, bool p_allow_lesser);
+ void setup(int64_t p_min, int64_t p_max, int64_t p_step, bool p_allow_greater, bool p_allow_lesser);
EditorPropertyInteger();
};
diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp
index 9d31e26086..f63d4884e2 100644
--- a/editor/editor_resource_preview.cpp
+++ b/editor/editor_resource_preview.cpp
@@ -215,7 +215,6 @@ void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref<
void EditorResourcePreview::_thread() {
-#ifndef SERVER_ENABLED
exited = false;
while (!exit) {
@@ -349,7 +348,6 @@ void EditorResourcePreview::_thread() {
preview_mutex->unlock();
}
}
-#endif
exited = true;
}
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index 93e9cc58fb..62effb406d 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -140,6 +140,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory
subdirectory_item->set_collapsed(false);
} else if (dname != "res://") {
subdirectory_item->get_parent()->remove_child(subdirectory_item);
+ memdelete(subdirectory_item);
}
}
diff --git a/editor/icons/icon_audio_stream_o_g_g_vorbis.svg b/editor/icons/icon_audio_stream_o_g_g_vorbis.svg
new file mode 100644
index 0000000000..a8d6fb6bf1
--- /dev/null
+++ b/editor/icons/icon_audio_stream_o_g_g_vorbis.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><path d="m11.971 1.002c-.08326.00207-.16593.014541-.24609.037109l-7 2c-.42881.12287-.7244.51487-.72461.96094v5.5508c-.16454-.033679-.33205-.050692-.5-.050781-1.3807 0-2.5 1.1193-2.5 2.5-.00000475 1.3807 1.1193 2.5 2.5 2.5 1.3456-.0013 2.4488-1.0674 2.4961-2.4121.0025906-.029226.003894-.058551.0039062-.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5c-.000916-.56314-.4664-1.0145-1.0293-.99805zm-1.4707 6.998c-.277 0-.5.223-.5.5v5c0 .277.223.5.5.5s.5-.223.5-.5v-5c0-.277-.223-.5-.5-.5zm2 1c-.277 0-.5.223-.5.5v3c0 .277.223.5.5.5s.5-.223.5-.5v-3c0-.277-.223-.5-.5-.5zm-4 1c-.277 0-.5.223-.5.5v1c0 .277.223.5.5.5s.5-.223.5-.5v-1c0-.277-.223-.5-.5-.5zm6 0c-.277 0-.5.223-.5.5v1c0 .277.223.5.5.5s.5-.223.5-.5v-1c0-.277-.223-.5-.5-.5z" fill="url(#a)"/></svg> \ No newline at end of file
diff --git a/editor/icons/icon_crosshair.svg b/editor/icons/icon_crosshair.svg
new file mode 100644
index 0000000000..b6fa5ec654
--- /dev/null
+++ b/editor/icons/icon_crosshair.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1v5h-5v1 3h5v5h4v-5h5v-4h-5v-5z" fill-opacity=".627451"/><path d="m2 7v2l5.0000803.0000197-.0000803 4.9999803h2l-.0000803-4.9999803 5.0000803-.0000197v-2l-5.0000803.0001803.0000803-5.0001803h-2l.0000803 5.0001803z" fill="#fefefe" fill-opacity=".862745"/></svg> \ No newline at end of file
diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp
index 7de6db7add..a418915830 100644
--- a/editor/import/editor_scene_importer_gltf.cpp
+++ b/editor/import/editor_scene_importer_gltf.cpp
@@ -1302,6 +1302,8 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b
if (mimetype.findn("png") != -1) {
//is a png
+ ERR_FAIL_COND_V(Image::_png_mem_loader_func == NULL, ERR_UNAVAILABLE);
+
const Ref<Image> img = Image::_png_mem_loader_func(data_ptr, data_size);
ERR_FAIL_COND_V(img.is_null(), ERR_FILE_CORRUPT);
@@ -1316,6 +1318,8 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b
if (mimetype.findn("jpeg") != -1) {
//is a jpg
+ ERR_FAIL_COND_V(Image::_jpg_mem_loader_func == NULL, ERR_UNAVAILABLE);
+
const Ref<Image> img = Image::_jpg_mem_loader_func(data_ptr, data_size);
ERR_FAIL_COND_V(img.is_null(), ERR_FILE_CORRUPT);
diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp
index def3f4bfec..2de224c043 100644
--- a/editor/plugins/animation_blend_tree_editor_plugin.cpp
+++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp
@@ -147,7 +147,7 @@ void AnimationNodeBlendTreeEditor::_update_graph() {
node->add_child(name);
node->set_slot(0, false, 0, Color(), true, 0, get_color("font_color", "Label"));
name->connect("text_entered", this, "_node_renamed", varray(agnode));
- name->connect("focus_exited", this, "_node_renamed_focus_out", varray(name, agnode));
+ name->connect("focus_exited", this, "_node_renamed_focus_out", varray(name, agnode), CONNECT_DEFERRED);
base = 1;
node->set_show_close_button(true);
node->connect("close_request", this, "_delete_request", varray(E->get()), CONNECT_DEFERRED);
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index 5b41da6e8e..5e69ce4e69 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -997,9 +997,9 @@ void AnimationPlayerEditor::_animation_duplicate() {
String new_name = current;
while (player->has_animation(new_name)) {
-
new_name = new_name + " (copy)";
}
+ new_anim->set_name(new_name);
undo_redo->create_action(TTR("Duplicate Animation"));
undo_redo->add_do_method(player, "add_animation", new_name, new_anim);
diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp
index 5d73ffa209..bdef108ef2 100644
--- a/editor/plugins/asset_library_editor_plugin.cpp
+++ b/editor/plugins/asset_library_editor_plugin.cpp
@@ -726,9 +726,9 @@ void EditorAssetLibrary::_image_update(bool use_cache, bool final, const PoolByt
uint8_t jpg_signature[3] = { 255, 216, 255 };
if (r.ptr()) {
- if (memcmp(&r[0], &png_signature[0], 8) == 0) {
+ if ((memcmp(&r[0], &png_signature[0], 8) == 0) && Image::_png_mem_loader_func) {
image->copy_internals_from(Image::_png_mem_loader_func(r.ptr(), len));
- } else if (memcmp(&r[0], &jpg_signature[0], 3) == 0) {
+ } else if ((memcmp(&r[0], &jpg_signature[0], 3) == 0) && Image::_jpg_mem_loader_func) {
image->copy_internals_from(Image::_jpg_mem_loader_func(r.ptr(), len));
}
}
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index 89e25ffcff..e1fafde6b9 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -1492,7 +1492,9 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) {
for (List<CanvasItem *>::Element *E = drag_selection.front(); E; E = E->next()) {
CanvasItem *canvas_item = E->get();
drag_to = transform.affine_inverse().xform(m->get_position());
- canvas_item->_edit_set_rotation(snap_angle(canvas_item->_edit_get_rotation() + (drag_from - drag_rotation_center).angle_to(drag_to - drag_rotation_center), canvas_item->_edit_get_rotation()));
+ //Rotate the opposite way if the canvas item's compounded scale has an uneven number of negative elements
+ bool opposite = (canvas_item->get_global_transform().get_scale().sign().dot(canvas_item->get_transform().get_scale().sign()) == 0);
+ canvas_item->_edit_set_rotation(snap_angle(canvas_item->_edit_get_rotation() + (opposite ? -1 : 1) * (drag_from - drag_rotation_center).angle_to(drag_to - drag_rotation_center), canvas_item->_edit_get_rotation()));
viewport->update();
}
return true;
@@ -3987,29 +3989,21 @@ void CanvasItemEditor::_update_scrollbars() {
updating_scroll = true;
- // Move the zoom buttons
+ // Move the zoom buttons.
Point2 controls_vb_begin = Point2(5, 5);
controls_vb_begin += (show_rulers) ? Point2(RULER_WIDTH, RULER_WIDTH) : Point2();
controls_vb->set_begin(controls_vb_begin);
- // Move and resize the scrollbars
- Size2 size = viewport->get_size();
Size2 hmin = h_scroll->get_minimum_size();
Size2 vmin = v_scroll->get_minimum_size();
- v_scroll->set_begin(Point2(size.width - vmin.width, (show_rulers) ? RULER_WIDTH : 0));
- v_scroll->set_end(Point2(size.width, size.height));
-
- h_scroll->set_begin(Point2((show_rulers) ? RULER_WIDTH : 0, size.height - hmin.height));
- h_scroll->set_end(Point2(size.width - vmin.width, size.height));
-
- // Get the visible frame
+ // Get the visible frame.
Size2 screen_rect = Size2(ProjectSettings::get_singleton()->get("display/window/size/width"), ProjectSettings::get_singleton()->get("display/window/size/height"));
Rect2 local_rect = Rect2(Point2(), viewport->get_size() - Size2(vmin.width, hmin.height));
_queue_update_bone_list();
- // Calculate scrollable area
+ // Calculate scrollable area.
Rect2 canvas_item_rect = Rect2(Point2(), screen_rect);
if (editor->get_edited_scene()) {
Rect2 content_rect = _get_encompassing_rect(editor->get_edited_scene());
@@ -4019,7 +4013,8 @@ void CanvasItemEditor::_update_scrollbars() {
canvas_item_rect.size += screen_rect * 2;
canvas_item_rect.position -= screen_rect;
- // Constraints the view offset and updates the scrollbars
+ // Constraints the view offset and updates the scrollbars.
+ Size2 size = viewport->get_size();
Point2 begin = canvas_item_rect.position;
Point2 end = canvas_item_rect.position + canvas_item_rect.size - local_rect.size / zoom;
bool constrain_editor_view = bool(EditorSettings::get_singleton()->get("editors/2d/constrain_editor_view"));
@@ -4066,7 +4061,13 @@ void CanvasItemEditor::_update_scrollbars() {
h_scroll->set_page(screen_rect.x);
}
- // Calculate scrollable area
+ // Move and resize the scrollbars, avoiding overlap.
+ v_scroll->set_begin(Point2(size.width - vmin.width, (show_rulers) ? RULER_WIDTH : 0));
+ v_scroll->set_end(Point2(size.width, size.height - (h_scroll->is_visible() ? hmin.height : 0)));
+ h_scroll->set_begin(Point2((show_rulers) ? RULER_WIDTH : 0, size.height - hmin.height));
+ h_scroll->set_end(Point2(size.width - (v_scroll->is_visible() ? vmin.width : 0), size.height));
+
+ // Calculate scrollable area.
v_scroll->set_value(view_offset.y);
h_scroll->set_value(view_offset.x);
@@ -4217,12 +4218,14 @@ void CanvasItemEditor::_zoom_on_position(float p_zoom, Point2 p_position) {
void CanvasItemEditor::_update_zoom_label() {
String zoom_text;
// The zoom level displayed is relative to the editor scale
- // (like in most image editors).
+ // (like in most image editors). Its lower bound is clamped to 1 as some people
+ // lower the editor scale to increase the available real estate,
+ // even if their display doesn't have a particularly low DPI.
if (zoom >= 10) {
// Don't show a decimal when the zoom level is higher than 1000 %.
- zoom_text = rtos(Math::round((zoom / EDSCALE) * 100)) + " %";
+ zoom_text = rtos(Math::round((zoom / MAX(1, EDSCALE)) * 100)) + " %";
} else {
- zoom_text = rtos(Math::stepify((zoom / EDSCALE) * 100, 0.1)) + " %";
+ zoom_text = rtos(Math::stepify((zoom / MAX(1, EDSCALE)) * 100, 0.1)) + " %";
}
zoom_reset->set_text(zoom_text);
@@ -4233,7 +4236,7 @@ void CanvasItemEditor::_button_zoom_minus() {
}
void CanvasItemEditor::_button_zoom_reset() {
- _zoom_on_position(1.0 * EDSCALE, viewport_scrollable->get_size() / 2.0);
+ _zoom_on_position(1.0 * MAX(1, EDSCALE), viewport_scrollable->get_size() / 2.0);
}
void CanvasItemEditor::_button_zoom_plus() {
@@ -4996,7 +4999,7 @@ Dictionary CanvasItemEditor::get_state() const {
Dictionary state;
// Take the editor scale into account.
- state["zoom"] = zoom / EDSCALE;
+ state["zoom"] = zoom / MAX(1, EDSCALE);
state["ofs"] = view_offset;
state["grid_offset"] = grid_offset;
state["grid_step"] = grid_step;
@@ -5035,7 +5038,7 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) {
if (state.has("zoom")) {
// Compensate the editor scale, so that the editor scale can be changed
// and the zoom level will still be the same (relative to the editor scale).
- zoom = float(p_state["zoom"]) * EDSCALE;
+ zoom = float(p_state["zoom"]) * MAX(1, EDSCALE);
_update_zoom_label();
}
@@ -5251,7 +5254,7 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
show_rulers = true;
show_guides = true;
show_edit_locks = true;
- zoom = 1.0 / EDSCALE;
+ zoom = 1.0 / MAX(1, EDSCALE);
view_offset = Point2(-150 - RULER_WIDTH, -95 - RULER_WIDTH);
previous_update_view_offset = view_offset; // Moves the view a little bit to the left so that (0,0) is visible. The values a relative to a 16/10 screen
grid_offset = Point2();
diff --git a/editor/plugins/item_list_editor_plugin.cpp b/editor/plugins/item_list_editor_plugin.cpp
index 39dc130f42..9f836ed0d3 100644
--- a/editor/plugins/item_list_editor_plugin.cpp
+++ b/editor/plugins/item_list_editor_plugin.cpp
@@ -302,7 +302,7 @@ void ItemListEditor::_delete_pressed() {
void ItemListEditor::_edit_items() {
- dialog->popup_centered(Vector2(300, 400) * EDSCALE);
+ dialog->popup_centered_clamped(Vector2(425, 1200) * EDSCALE, 0.8);
}
void ItemListEditor::edit(Node *p_item_list) {
diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp
index de23193df0..04d595461d 100644
--- a/editor/plugins/polygon_2d_editor_plugin.cpp
+++ b/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -1196,7 +1196,9 @@ void Polygon2DEditor::_uv_draw() {
rect.position -= uv_edit_draw->get_size();
rect.size += uv_edit_draw->get_size() * 2.0;
+
updating_uv_scroll = true;
+
uv_hscroll->set_min(rect.position.x);
uv_hscroll->set_max(rect.position.x + rect.size.x);
if (ABS(rect.position.x - (rect.position.x + rect.size.x)) <= uv_edit_draw->get_size().x) {
@@ -1216,6 +1218,14 @@ void Polygon2DEditor::_uv_draw() {
uv_vscroll->set_page(uv_edit_draw->get_size().y);
uv_vscroll->set_value(uv_draw_ofs.y);
}
+
+ Size2 hmin = uv_hscroll->get_combined_minimum_size();
+ Size2 vmin = uv_vscroll->get_combined_minimum_size();
+
+ // Avoid scrollbar overlapping.
+ uv_hscroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, uv_vscroll->is_visible() ? -vmin.width : 0);
+ uv_vscroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, uv_hscroll->is_visible() ? -hmin.height : 0);
+
updating_uv_scroll = false;
}
@@ -1467,7 +1477,6 @@ Polygon2DEditor::Polygon2DEditor(EditorNode *p_editor) :
uv_hscroll->set_step(0.001);
uv_edit_draw->add_child(uv_hscroll);
uv_hscroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE);
- uv_hscroll->set_margin(MARGIN_RIGHT, -uv_vscroll->get_size().x * EDSCALE);
uv_hscroll->connect("value_changed", this, "_uv_scroll_changed");
bone_scroll_main_vb = memnew(VBoxContainer);
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index f0e4a4bfdc..1432c3fc63 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -691,13 +691,16 @@ void ScriptTextEditor::_update_bookmark_list() {
bookmarks_menu->add_separator();
for (int i = 0; i < bookmark_list.size(); i++) {
- String line = code_editor->get_text_edit()->get_line(bookmark_list[i]).strip_edges();
+ // Strip edges to remove spaces or tabs.
+ // Also replace any tabs by spaces, since we can't print tabs in the menu.
+ String line = code_editor->get_text_edit()->get_line(bookmark_list[i]).replace("\t", " ").strip_edges();
+
// Limit the size of the line if too big.
if (line.length() > 50) {
line = line.substr(0, 50);
}
- bookmarks_menu->add_item(String::num((int)bookmark_list[i] + 1) + " - \"" + line + "\"");
+ bookmarks_menu->add_item(String::num((int)bookmark_list[i] + 1) + " - `" + line + "`");
bookmarks_menu->set_item_metadata(bookmarks_menu->get_item_count() - 1, bookmark_list[i]);
}
}
@@ -841,13 +844,16 @@ void ScriptTextEditor::_update_breakpoint_list() {
breakpoints_menu->add_separator();
for (int i = 0; i < breakpoint_list.size(); i++) {
- String line = code_editor->get_text_edit()->get_line(breakpoint_list[i]).strip_edges();
+ // Strip edges to remove spaces or tabs.
+ // Also replace any tabs by spaces, since we can't print tabs in the menu.
+ String line = code_editor->get_text_edit()->get_line(breakpoint_list[i]).replace("\t", " ").strip_edges();
+
// Limit the size of the line if too big.
if (line.length() > 50) {
line = line.substr(0, 50);
}
- breakpoints_menu->add_item(String::num((int)breakpoint_list[i] + 1) + " - \"" + line + "\"");
+ breakpoints_menu->add_item(String::num((int)breakpoint_list[i] + 1) + " - `" + line + "`");
breakpoints_menu->set_item_metadata(breakpoints_menu->get_item_count() - 1, breakpoint_list[i]);
}
}
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index c0b5053f9d..c24a666c55 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -379,6 +379,8 @@ void ShaderEditor::_editor_settings_changed() {
shader_editor->get_text_edit()->cursor_set_block_mode(EditorSettings::get_singleton()->get("text_editor/cursor/block_caret"));
shader_editor->get_text_edit()->set_smooth_scroll_enabled(EditorSettings::get_singleton()->get("text_editor/navigation/smooth_scrolling"));
shader_editor->get_text_edit()->set_v_scroll_speed(EditorSettings::get_singleton()->get("text_editor/navigation/v_scroll_speed"));
+ shader_editor->get_text_edit()->set_draw_minimap(EditorSettings::get_singleton()->get("text_editor/navigation/show_minimap"));
+ shader_editor->get_text_edit()->set_minimap_width((int)EditorSettings::get_singleton()->get("text_editor/navigation/minimap_width") * EDSCALE);
}
void ShaderEditor::_bind_methods() {
diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp
index 252f067eb1..bf87bfc14d 100644
--- a/editor/plugins/spatial_editor_plugin.cpp
+++ b/editor/plugins/spatial_editor_plugin.cpp
@@ -2135,6 +2135,13 @@ void SpatialEditorViewport::_notification(int p_what) {
call_deferred("update_transform_gizmo_view");
}
+ if (p_what == NOTIFICATION_READY) {
+ // The crosshair icon doesn't depend on the editor theme.
+ crosshair->set_texture(get_icon("Crosshair", "EditorIcons"));
+ // Set the anchors and margins after changing the icon to ensure it's centered correctly.
+ crosshair->set_anchors_and_margins_preset(PRESET_CENTER);
+ }
+
if (p_what == NOTIFICATION_PROCESS) {
real_t delta = get_process_delta_time();
@@ -2255,6 +2262,10 @@ void SpatialEditorViewport::_notification(int p_what) {
current_camera = camera;
}
+ // Display the crosshair only while freelooking. Hide it otherwise,
+ // as the crosshair can be distracting.
+ crosshair->set_visible(freelook_active);
+
if (show_info) {
String text;
text += "X: " + rtos(current_camera->get_translation().x).pad_decimals(1) + "\n";
@@ -3546,6 +3557,10 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
camera->make_current();
surface->set_focus_mode(FOCUS_ALL);
+ crosshair = memnew(TextureRect);
+ crosshair->set_mouse_filter(MOUSE_FILTER_IGNORE);
+ surface->add_child(crosshair);
+
VBoxContainer *vbox = memnew(VBoxContainer);
surface->add_child(vbox);
vbox->set_position(Point2(10, 10) * EDSCALE);
@@ -3598,6 +3613,24 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed
view_menu->set_disable_shortcuts(true);
+ if (OS::get_singleton()->get_current_video_driver() == OS::VIDEO_DRIVER_GLES2) {
+ // Alternate display modes only work when using the GLES3 renderer; make this explicit.
+ const int normal_idx = view_menu->get_popup()->get_item_index(VIEW_DISPLAY_NORMAL);
+ const int wireframe_idx = view_menu->get_popup()->get_item_index(VIEW_DISPLAY_WIREFRAME);
+ const int overdraw_idx = view_menu->get_popup()->get_item_index(VIEW_DISPLAY_OVERDRAW);
+ const int shadeless_idx = view_menu->get_popup()->get_item_index(VIEW_DISPLAY_SHADELESS);
+ const String unsupported_tooltip = TTR("Not available when using the GLES2 renderer.");
+
+ view_menu->get_popup()->set_item_disabled(normal_idx, true);
+ view_menu->get_popup()->set_item_tooltip(normal_idx, unsupported_tooltip);
+ view_menu->get_popup()->set_item_disabled(wireframe_idx, true);
+ view_menu->get_popup()->set_item_tooltip(wireframe_idx, unsupported_tooltip);
+ view_menu->get_popup()->set_item_disabled(overdraw_idx, true);
+ view_menu->get_popup()->set_item_tooltip(overdraw_idx, unsupported_tooltip);
+ view_menu->get_popup()->set_item_disabled(shadeless_idx, true);
+ 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);
diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h
index 356646221e..5cc2b24cbb 100644
--- a/editor/plugins/spatial_editor_plugin.h
+++ b/editor/plugins/spatial_editor_plugin.h
@@ -217,6 +217,7 @@ private:
bool freelook_active;
real_t freelook_speed;
+ TextureRect *crosshair;
Label *info_label;
Label *fps_label;
Label *cinema_label;
diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp
index 13faeb0edb..f9b1e3b43a 100644
--- a/editor/plugins/texture_region_editor_plugin.cpp
+++ b/editor/plugins/texture_region_editor_plugin.cpp
@@ -178,6 +178,7 @@ void TextureRegionEditor::_region_draw() {
scroll_rect.size += scroll_margin * 2;
updating_scroll = true;
+
hscroll->set_min(scroll_rect.position.x);
hscroll->set_max(scroll_rect.position.x + scroll_rect.size.x);
if (ABS(scroll_rect.position.x - (scroll_rect.position.x + scroll_rect.size.x)) <= scroll_margin.x) {
@@ -198,6 +199,14 @@ void TextureRegionEditor::_region_draw() {
vscroll->set_page(scroll_margin.y);
vscroll->set_value(draw_ofs.y);
}
+
+ Size2 hmin = hscroll->get_combined_minimum_size();
+ Size2 vmin = vscroll->get_combined_minimum_size();
+
+ // Avoid scrollbar overlapping.
+ hscroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, vscroll->is_visible() ? -vmin.width : 0);
+ vscroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, hscroll->is_visible() ? -hmin.height : 0);
+
updating_scroll = false;
if (node_ninepatch || obj_styleBox.is_valid()) {
@@ -1019,7 +1028,6 @@ TextureRegionEditor::TextureRegionEditor(EditorNode *p_editor) {
hscroll->set_step(0.001);
edit_draw->add_child(hscroll);
hscroll->set_anchors_and_margins_preset(PRESET_BOTTOM_WIDE);
- hscroll->set_margin(MARGIN_RIGHT, -vscroll->get_size().x * EDSCALE);
hscroll->connect("value_changed", this, "_scroll_changed");
updating_scroll = false;
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index 0a904a42df..ca3431d3ec 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -1981,6 +1981,7 @@ void ProjectManager::_global_menu_action(const Variant &p_id, const Variant &p_m
int id = (int)p_id;
if (id == ProjectList::GLOBAL_NEW_WINDOW) {
List<String> args;
+ args.push_back("-p");
String exec = OS::get_singleton()->get_executable_path();
OS::ProcessID pid = 0;
diff --git a/editor/translations/af.po b/editor/translations/af.po
index 5dfc860107..129fe3e6aa 100644
--- a/editor/translations/af.po
+++ b/editor/translations/af.po
@@ -2014,14 +2014,37 @@ msgstr "Geërf deur:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Kort Beskrywing:"
+msgid "Description"
+msgstr "Beskrywing:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request 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]!"
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Eienskappe"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Laai Verstek"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metodes"
@@ -2035,36 +2058,17 @@ msgid "Enumerations"
msgstr "Opnoemings"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstantes"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "Beskrywing"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr ""
+msgid "Property Descriptions"
+msgstr "Eienskap Beskrywing:"
#: editor/editor_help.cpp
-#, fuzzy
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "(value)"
msgstr ""
-"Daar is tans geen beskrywing vir hierdie metode nie. Help ons asseblief deur "
-"[color=$color][url=$url]een by te dra[/url][/color]!"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Property Descriptions"
-msgstr "Eienskap Beskrywing:"
#: editor/editor_help.cpp
msgid ""
@@ -12539,6 +12543,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Kort Beskrywing:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Beskrywing"
+
#, fuzzy
#~ msgid "Methods:"
#~ msgstr "Metodes"
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index f488274efc..1fa1ceb069 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -32,12 +32,13 @@
# Rachid Graphicos <graphicos1d@gmail.com>, 2019.
# traveller010 <manar.bushnaq.001@gmail.com>, 2019.
# Ahmed Shahwan <dev.ahmed.shahwan@gmail.com>, 2019.
+# hshw <shw@tutanota.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2019-12-26 00:02+0000\n"
-"Last-Translator: Ahmed Shahwan <dev.ahmed.shahwan@gmail.com>\n"
+"PO-Revision-Date: 2020-01-16 22:23+0000\n"
+"Last-Translator: hshw <shw@tutanota.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -46,7 +47,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 3.10\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -55,7 +56,7 @@ msgstr "نوع معامل خاطئ للدالة convert()ØŒ إستخدم ثواØ
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
msgid "Expected a string of length 1 (a character)."
-msgstr ""
+msgstr "كان يتوقع سلسلة من الطول 1 (حرÙ)."
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/mono/glue/gd_glue.cpp
@@ -1220,7 +1221,7 @@ msgstr "ÙŠÙكك الضغط عن الأصول"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "The following files failed extraction from package:"
-msgstr ""
+msgstr "ÙØ´Ù„ استخراج Ø§Ù„Ù…Ù„ÙØ§Øª التالية من الحزمة:"
#: editor/editor_asset_installer.cpp
#, fuzzy
@@ -1699,7 +1700,7 @@ msgstr "خصائص:"
#: editor/editor_feature_profile.cpp
msgid "Enabled Features:"
-msgstr ""
+msgstr "الميزات Ø§Ù„Ù…ÙØ¹Ù„Ø©:"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1739,7 +1740,7 @@ msgstr "الحالي:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/version_control_editor_plugin.cpp
msgid "New"
-msgstr ""
+msgstr "جديد"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/project_manager.cpp
@@ -1989,14 +1990,38 @@ msgstr "مورث بواسطة:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "وص٠مختصر:"
+msgid "Description"
+msgstr "الوصÙ:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "الدورس علي الإنترنت:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"ليس هناك دروس تعليمية ÙÙŠ هذا Ø§Ù„ÙØµÙ„ØŒ يمكنك [color=$color][url=$url] المساهمة "
+"ÙÙŠ إحداها [/url][/color] أو [color=$color][url=$url2]أطلب أحداها [/url][/"
+"color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "خصائص"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "قائمة الطرق"
@@ -2009,36 +2034,18 @@ msgid "Enumerations"
msgstr "التعدادات"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "التعداد "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "الثوابت"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "وص٠الصÙ"
-
-#: editor/editor_help.cpp
#, fuzzy
-msgid "Online Tutorials"
-msgstr "الدورس علي الإنترنت:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"ليس هناك دروس تعليمية ÙÙŠ هذا Ø§Ù„ÙØµÙ„ØŒ يمكنك [color=$color][url=$url] المساهمة "
-"ÙÙŠ إحداها [/url][/color] أو [color=$color][url=$url2]أطلب أحداها [/url][/"
-"color]."
+msgid "Property Descriptions"
+msgstr "وص٠الملكية:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "وص٠الملكية:"
+msgid "(value)"
+msgstr "القيمة:"
#: editor/editor_help.cpp
msgid ""
@@ -2193,7 +2200,7 @@ msgstr "تنزيل"
#: editor/editor_network_profiler.cpp
msgid "Up"
-msgstr ""
+msgstr "Ùوق"
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
msgid "Node"
@@ -2217,7 +2224,7 @@ msgstr ""
#: editor/editor_node.cpp editor/project_manager.cpp
msgid "New Window"
-msgstr ""
+msgstr "Ù†Ø§ÙØ°Ø© جديدة"
#: editor/editor_node.cpp
msgid "Imported resources can't be saved."
@@ -2662,7 +2669,7 @@ msgstr "اغلاق"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Close Other Tabs"
-msgstr ""
+msgstr "أغلق الألسنة الاخرى"
#: editor/editor_node.cpp
msgid "Close Tabs to the Right"
@@ -12800,7 +12807,17 @@ msgstr "يمكن تعيين المتغيرات Ùقط ÙÙŠ الذروة ."
#: servers/visual/shader_language.cpp
msgid "Constants cannot be modified."
-msgstr ""
+msgstr "لا يمكن تعديل الثوابت."
+
+#~ msgid "enum "
+#~ msgstr "التعداد "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "وص٠مختصر:"
+
+#~ msgid "Class Description"
+#~ msgstr "وص٠الصÙ"
#~ msgid "Project export failed with error code %d."
#~ msgstr "تصدير المشروع ÙØ´Ù„, رمز الخطأ %d."
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index 8b3fe3d00d..adf1218188 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -1978,14 +1978,33 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Кратко ОпиÑание:"
+msgid "Description"
+msgstr "ОпиÑание:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
#: editor/editor_help.cpp
msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "default:"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Методи"
@@ -1999,33 +2018,18 @@ msgid "Enumerations"
msgstr "Изброени типове"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr ""
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "КонÑтанти"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "ОпиÑание"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr ""
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
+msgid "Property Descriptions"
+msgstr "Кратко ОпиÑание:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Кратко ОпиÑание:"
+msgid "(value)"
+msgstr "СтойноÑÑ‚"
#: editor/editor_help.cpp
msgid ""
@@ -12721,6 +12725,14 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Кратко ОпиÑание:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "ОпиÑание"
+
#~ msgid "Password:"
#~ msgstr "Парола:"
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index 86ffa156e6..6c4abed64b 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -2066,58 +2066,59 @@ msgstr "গৃহীত হয়েছে:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "সংকà§à¦·à¦¿à¦ªà§à¦¤ বরà§à¦£à¦¨à¦¾:"
+msgid "Description"
+msgstr "বরà§à¦£à¦¨à¦¾:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Properties"
-msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:"
+msgid "Online Tutorials"
+msgstr "টিউটোরিয়ালসমূহ"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Methods"
-msgstr "মেথডের তালিকা:"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"à¦à¦‡ মেথড সমà§à¦ªà¦°à§à¦•ে বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ তথà§à¦¯ লিপিবদà§à¦§ করা হয়নি। অনà§à¦—à§à¦°à¦¹ করে তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° মাধà§à¦¯à¦®à§‡ "
+"সহায়তা করà§à¦¨à¥¤ তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° জনà§à¦¯ [color=$color][url=$url], [/url][/color] ফরমà§à¦¯à¦¾à¦Ÿ "
+"বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করà§à¦¨ !"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Theme Properties"
+msgid "Properties"
msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Enumerations"
-msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ"
+msgid "override:"
+msgstr "ওভাররাইড..."
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
+#, fuzzy
+msgid "default:"
+msgstr "সাধারণ/ডিফলà§à¦Ÿ"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Constants"
-msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:"
+msgid "Methods"
+msgstr "মেথডের তালিকা:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "বরà§à¦£à¦¨à¦¾:"
+msgid "Theme Properties"
+msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Online Tutorials"
-msgstr "টিউটোরিয়ালসমূহ"
+msgid "Enumerations"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ"
#: editor/editor_help.cpp
#, fuzzy
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"à¦à¦‡ মেথড সমà§à¦ªà¦°à§à¦•ে বিসà§à¦¤à¦¾à¦°à¦¿à¦¤ তথà§à¦¯ লিপিবদà§à¦§ করা হয়নি। অনà§à¦—à§à¦°à¦¹ করে তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° মাধà§à¦¯à¦®à§‡ "
-"সহায়তা করà§à¦¨à¥¤ তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨à§‡à¦° জনà§à¦¯ [color=$color][url=$url], [/url][/color] ফরমà§à¦¯à¦¾à¦Ÿ "
-"বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করà§à¦¨ !"
+msgid "Constants"
+msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:"
#: editor/editor_help.cpp
#, fuzzy
@@ -2125,6 +2126,11 @@ msgid "Property Descriptions"
msgstr "মান/পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦° বরà§à¦£à¦¨à¦¾:"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "মান"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -13382,6 +13388,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "সংকà§à¦·à¦¿à¦ªà§à¦¤ বরà§à¦£à¦¨à¦¾:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "বরà§à¦£à¦¨à¦¾:"
+
#~ msgid "Password:"
#~ msgstr "পাসওয়ারà§à¦¡:"
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index 441fa30e91..047ab04858 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -1961,14 +1961,39 @@ msgstr "Heretat per:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Descripció breu:"
+msgid "Description"
+msgstr "Descripció:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Tutorials en línia:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Aquesta classe no disposa encara de cap Tutorial. Podeu contribuir [color="
+"$color][url=$url] tot aportant-ne un[/url][/color] o [color=$color][url="
+"$url2]sol·licitant-lo[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Propietats"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Sobreescriu"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Predeterminat"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Mètodes"
@@ -1981,35 +2006,17 @@ msgid "Enumerations"
msgstr "Enumeracions"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Constants"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Descripció de la classe"
+msgid "Property Descriptions"
+msgstr "Descripcions de la Propietat"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Online Tutorials"
-msgstr "Tutorials en línia:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Aquesta classe no disposa encara de cap Tutorial. Podeu contribuir [color="
-"$color][url=$url] tot aportant-ne un[/url][/color] o [color=$color][url="
-"$url2]sol·licitant-lo[/url][/color]."
-
-#: editor/editor_help.cpp
-msgid "Property Descriptions"
-msgstr "Descripcions de la Propietat"
+msgid "(value)"
+msgstr "Valor"
#: editor/editor_help.cpp
msgid ""
@@ -12977,6 +12984,16 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Les constants no es poden modificar."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Descripció breu:"
+
+#~ msgid "Class Description"
+#~ msgstr "Descripció de la classe"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "L'exportació del projecte ha fallat amb el codi d'error %d."
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index b1c4a67f51..2ed1e15d3d 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -1954,14 +1954,39 @@ msgid "Inherited by:"
msgstr "Děděná z:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "StruÄný popis"
+#, fuzzy
+msgid "Description"
+msgstr "Popis:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Online návody"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"V souÄasné dobÄ› pro tuto třídu neexistují žádné návody, můžete nÄ›jaký [color="
+"$color][url=$url]vytvořit[/url][/color] nebo o něj [color=$color][url="
+"$url2]zažádat[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Vlastnosti"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Přepsat"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Výchozí"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metody"
@@ -1974,36 +1999,19 @@ msgid "Enumerations"
msgstr "VýÄty"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "výÄet "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstanty"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Popis třídy"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Online návody"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"V souÄasné dobÄ› pro tuto třídu neexistují žádné návody, můžete nÄ›jaký [color="
-"$color][url=$url]vytvořit[/url][/color] nebo o něj [color=$color][url="
-"$url2]zažádat[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Popis vlastnosti"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Hodnota"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12726,6 +12734,15 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstanty není možné upravovat."
+#~ msgid "enum "
+#~ msgstr "výÄet "
+
+#~ msgid "Brief Description"
+#~ msgstr "StruÄný popis"
+
+#~ msgid "Class Description"
+#~ msgstr "Popis třídy"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Export projektu selhal s chybovým kódem %d."
diff --git a/editor/translations/da.po b/editor/translations/da.po
index 4c2976812c..3f36d56975 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -14,12 +14,13 @@
# Rémi Verschelde <akien@godotengine.org>, 2019.
# Mads K. Bredager <mbredager@gmail.com>, 2019.
# Kristoffer Andersen <kjaa@google.com>, 2019.
+# Joe Osborne <reachjoe.o@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2019-10-04 09:55+0000\n"
-"Last-Translator: Kristoffer Andersen <kjaa@google.com>\n"
+"PO-Revision-Date: 2020-01-16 22:23+0000\n"
+"Last-Translator: Joe Osborne <reachjoe.o@gmail.com>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/"
"godot/da/>\n"
"Language: da\n"
@@ -27,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 3.9-dev\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -755,7 +756,7 @@ msgstr "Kun Valgte"
#: editor/code_editor.cpp editor/plugins/script_text_editor.cpp
#: editor/plugins/text_editor.cpp
msgid "Standard"
-msgstr ""
+msgstr "Standard"
#: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp
msgid "Toggle Scripts Panel"
@@ -812,7 +813,7 @@ msgstr "Kan ikke forbinde til host:"
#: editor/connections_dialog.cpp
#, fuzzy
msgid "From Signal:"
-msgstr "Signaler:"
+msgstr "Fra signal:"
#: editor/connections_dialog.cpp
msgid "Scene does not contain any script."
@@ -2023,14 +2024,38 @@ msgstr "Arvet af:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Kort Beskrivelse:"
+msgid "Description"
+msgstr "Beskrivelse:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Online Undervisning:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Der er i øjeblikket ingen vejledninger for denne klasse, du kan [color="
+"$color][url=$url]bidrage med en[/url][/color] eller [color=$color][url="
+"$url2]anmode en[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Egenskaber"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Standard"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metoder"
@@ -2043,35 +2068,17 @@ msgid "Enumerations"
msgstr "Tællinger"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstanter"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Klasse beskrivelse"
+msgid "Property Descriptions"
+msgstr "Egenskab beskrivelser"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Online Tutorials"
-msgstr "Online Undervisning:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Der er i øjeblikket ingen vejledninger for denne klasse, du kan [color="
-"$color][url=$url]bidrage med en[/url][/color] eller [color=$color][url="
-"$url2]anmode en[/url][/color]."
-
-#: editor/editor_help.cpp
-msgid "Property Descriptions"
-msgstr "Egenskab beskrivelser"
+msgid "(value)"
+msgstr "Værdi:"
#: editor/editor_help.cpp
msgid ""
@@ -12864,6 +12871,16 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstanter kan ikke ændres."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Kort Beskrivelse:"
+
+#~ msgid "Class Description"
+#~ msgstr "Klasse beskrivelse"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Projekt eksport fejlede med fejlkode %d."
diff --git a/editor/translations/de.po b/editor/translations/de.po
index d15b7a5b04..0285643cde 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -52,7 +52,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-03 21:21+0000\n"
+"PO-Revision-Date: 2020-01-13 13:36+0000\n"
"Last-Translator: So Wieso <sowieso@dukun.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
@@ -61,7 +61,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 3.10\n"
+"X-Generator: Weblate 3.10.1\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1242,9 +1242,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Fehler beim Öffnen der Paketdatei, kein ZIP-Format."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Existiert bereits"
+msgstr "%s (existiert bereits)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1255,9 +1254,8 @@ msgid "The following files failed extraction from package:"
msgstr "Die folgenden Dateien ließen sich nicht aus dem Paket extrahieren:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "%d weitere Datei(en)"
+msgstr "Und %s weitere Dateien."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1269,9 +1267,8 @@ msgid "Success!"
msgstr "Geschafft!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "Inhalt:"
+msgstr "Paketinhalte:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1411,9 +1408,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "Ungültige Datei, kein Audiobus-Layout."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Fehler beim Speichern der Datei!"
+msgstr "Fehler beim Speichern von Datei: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1989,14 +1985,39 @@ msgid "Inherited by:"
msgstr "Vererbt an:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Kurze Beschreibung"
+#, fuzzy
+msgid "Description"
+msgstr "Beschreibung:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Anleitungen im Netz"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Es gibt zurzeit keine Tutorials zu dieser Klasse. Mitwirkungen durch [color="
+"$color][url=$url]eigene Beiträge[/url][/color] oder [color=$color][url="
+"$url2]Meldung von Problemen[/url][/color] sind sehr erwünscht."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Eigenschaften"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Überschreibungen"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Standard"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Methoden"
@@ -2009,36 +2030,19 @@ msgid "Enumerations"
msgstr "Aufzählungen"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "Enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstanten"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Klassenbeschreibung"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Anleitungen im Netz"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Es gibt zurzeit keine Tutorials zu dieser Klasse. Mitwirkungen durch [color="
-"$color][url=$url]eigene Beiträge[/url][/color] oder [color=$color][url="
-"$url2]Meldung von Problemen[/url][/color] sind sehr erwünscht."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Eigenschaften-Beschreibung"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Wert"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -5786,20 +5790,18 @@ msgstr "Emissionsmaske"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "Schrumpfen (Pixel): "
+msgstr "Festkörper-Pixel"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Rand-Pixel"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Verzeichnisse & Dateien:"
+msgstr "Gerichtete Rand-Pixel"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -10907,9 +10909,8 @@ msgid "Will load an existing script file."
msgstr "Dies wird eine bestehende Skriptdatei laden."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "Teilung existiert bereits."
+msgstr "Skriptdatei existiert bereits."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12611,11 +12612,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Farbe: #%s\n"
+"LMT: Farbe festlegen\n"
+"RMT: Voreinstellung entfernen"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Wählt eine Farbe vom Bildschirm aus."
+msgstr "Eine Farbe innerhalb des Editorfensters auswählen."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12741,6 +12744,15 @@ msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden."
msgid "Constants cannot be modified."
msgstr "Konstanten können nicht verändert werden."
+#~ msgid "enum "
+#~ msgstr "Enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Kurze Beschreibung"
+
+#~ msgid "Class Description"
+#~ msgstr "Klassenbeschreibung"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Projekt-Export ist fehlgeschlagen mit Fehlercode %d."
diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po
index 093718f019..1c2ef6990a 100644
--- a/editor/translations/de_CH.po
+++ b/editor/translations/de_CH.po
@@ -1965,48 +1965,47 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "Script hinzufügen"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Theme Properties"
-msgstr "Node erstellen"
+msgid "Properties"
+msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "Script hinzufügen"
+msgid "Theme Properties"
+msgstr "Node erstellen"
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -2015,6 +2014,10 @@ msgid "Property Descriptions"
msgstr "Script hinzufügen"
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12622,6 +12625,10 @@ msgid "Constants cannot be modified."
msgstr ""
#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Script hinzufügen"
+
+#, fuzzy
#~ msgid "Base Type:"
#~ msgstr "Typ ändern"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index bae7df17e2..21b718b405 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -1880,46 +1880,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1927,6 +1927,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/el.po b/editor/translations/el.po
index 8c152332a2..fd426b4614 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -1947,14 +1947,39 @@ msgid "Inherited by:"
msgstr "ΚληÏονομείται από:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "ΣÏντομη ΠεÏιγÏαφή"
+#, fuzzy
+msgid "Description"
+msgstr "ΠεÏιγÏαφή:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Διαδικτυακή Εκμάθηση"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Δεν υπάÏχει ακόμα βοήθεια για αυτήν την κλάση, μποÏείτε να την [color=$color]"
+"[url=$url]γÏάψετε[/url][/color] ή να την [color=$color][url=$url2]ζητήσετε[/"
+"url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Ιδιότητες"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Αντικατάσταση"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "ΠÏοεπιλογή"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "ΣυναÏτήσεις"
@@ -1967,36 +1992,19 @@ msgid "Enumerations"
msgstr "ΑπαÏιθμήσεις"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "απαÏίθμηση "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "ΣταθεÏές"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "ΠεÏιγÏαφή κλάσης"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Διαδικτυακή Εκμάθηση"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Δεν υπάÏχει ακόμα βοήθεια για αυτήν την κλάση, μποÏείτε να την [color=$color]"
-"[url=$url]γÏάψετε[/url][/color] ή να την [color=$color][url=$url2]ζητήσετε[/"
-"url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "ΠεÏιγÏαφές ιδιοτήτων"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Τιμή"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12773,6 +12781,15 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Οι σταθεÏές δεν μποÏοÏν να Ï„ÏοποποιηθοÏν."
+#~ msgid "enum "
+#~ msgstr "απαÏίθμηση "
+
+#~ msgid "Brief Description"
+#~ msgstr "ΣÏντομη ΠεÏιγÏαφή"
+
+#~ msgid "Class Description"
+#~ msgstr "ΠεÏιγÏαφή κλάσης"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Η εξαγωγή του έÏγου απέτυχε με κωδικό %d."
diff --git a/editor/translations/eo.po b/editor/translations/eo.po
index 152834ff55..032ef20e91 100644
--- a/editor/translations/eo.po
+++ b/editor/translations/eo.po
@@ -1927,46 +1927,46 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "Priskribo:"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1975,6 +1975,11 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
+msgid "(value)"
+msgstr "Valoro:"
+
+#: editor/editor_help.cpp
+#, fuzzy
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12187,6 +12192,10 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Priskribo:"
+
#~ msgid "Input"
#~ msgstr "Enigo"
diff --git a/editor/translations/es.po b/editor/translations/es.po
index 400178ff7c..52d555bef1 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -46,7 +46,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-11 03:05+0000\n"
+"PO-Revision-Date: 2020-01-16 22:23+0000\n"
"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot/es/>\n"
@@ -55,7 +55,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 3.10.1\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1236,9 +1236,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Error al abrir el archivo comprimido, no está en formato ZIP."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Ya existe"
+msgstr "%s (Ya existe)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1249,9 +1248,8 @@ msgid "The following files failed extraction from package:"
msgstr "Los siguientes archivos no se pudieron extraer del paquete:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "%d más archivos"
+msgstr "Y %d archivos más."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1263,9 +1261,8 @@ msgid "Success!"
msgstr "¡Éxito!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "Contenido:"
+msgstr "Contenido del Paquete:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1405,9 +1402,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "Archivo inválido. No es un layout de bus de audio."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "¡Error guardando archivo!"
+msgstr "Error guardando el archivo: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1986,14 +1982,39 @@ msgid "Inherited by:"
msgstr "Heredada por:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Descripción Breve"
+#, fuzzy
+msgid "Description"
+msgstr "Descripción:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Tutoriales en línea"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Actualmente no existen tutoriales para esta clase, puedes [color=$color][url="
+"$url]contribuir uno[/url][/color] o [color=$color][url=$url2]solicitar uno[/"
+"url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Propiedades"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Sobreescritura"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Predeterminado"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Métodos"
@@ -2006,36 +2027,19 @@ msgid "Enumerations"
msgstr "Enumeraciones"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Constantes"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Descripción de la Clase"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Tutoriales en línea"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Actualmente no existen tutoriales para esta clase, puedes [color=$color][url="
-"$url]contribuir uno[/url][/color] o [color=$color][url=$url2]solicitar uno[/"
-"url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Descripción de Propiedades"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Valor"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -2761,7 +2765,7 @@ msgstr "Convertir a..."
#: editor/editor_node.cpp
msgid "MeshLibrary..."
-msgstr "Librería de mallas..."
+msgstr "MeshLibrary..."
#: editor/editor_node.cpp
msgid "TileSet..."
@@ -5785,20 +5789,18 @@ msgstr "Máscara de Emisión"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "Encoger (Píxeles): "
+msgstr "Pixeles Sólidos"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Píxeles del Borde"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Directorios y Archivos:"
+msgstr "Píxeles del Borde Directos"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -8286,9 +8288,9 @@ msgid ""
"Shift+LMB: Set wildcard bit.\n"
"Click on another Tile to edit it."
msgstr ""
-"Clic Izquierdo: Activar bit.\n"
-"Clic Derecho: Desactivar bit.\n"
-"Shift + Clic Izquierdo: Establecer valor de bit comodín.\n"
+"Clic izq: Activar bit.\n"
+"Clic der: Desactivar bit.\n"
+"Shift + Clic izq: Establecer valor de bit comodín.\n"
"Haz clic en otro Tile para editarlo."
#: editor/plugins/tile_set_editor_plugin.cpp
@@ -10889,9 +10891,8 @@ msgid "Will load an existing script file."
msgstr "Se cargará un archivo de script existente."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "La división ya existe."
+msgstr "El archivo de script ya existe."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12594,11 +12595,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Color: #%s\n"
+"Clic izq: Configurar color\n"
+"Clic der: Borrar configuración predeterminada"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Selecciona un color de la pantalla."
+msgstr "Selecciona un color de la ventana del editor."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12721,6 +12724,15 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice."
msgid "Constants cannot be modified."
msgstr "Las constantes no pueden modificarse."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Descripción Breve"
+
+#~ msgid "Class Description"
+#~ msgstr "Descripción de la Clase"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "La exportación del proyecto falló con el código de error %d."
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index 2109b2bfdb..35c5c515fb 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -13,11 +13,12 @@
# Florencia Menéndez <mariaflormz2@gmail.com>, 2019.
# roger <616steam@gmail.com>, 2019.
# Francisco José Carllinni <panchopepe@protonmail.com>, 2019.
+# Nicolas Zirulnik <nicolaszirulnik@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-11 03:05+0000\n"
+"PO-Revision-Date: 2020-01-16 22:23+0000\n"
"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n"
"Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/"
"godot-engine/godot/es_AR/>\n"
@@ -26,7 +27,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 3.10.1\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1205,9 +1206,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Error al abrir el archivo comprimido, no está en formato ZIP."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Ya existe"
+msgstr "%s (Ya existe)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1218,9 +1218,8 @@ msgid "The following files failed extraction from package:"
msgstr "Los siguientes archivos no se pudieron extraer del paquete:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "%d más archivos"
+msgstr "Y %d archivos más."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1232,9 +1231,8 @@ msgid "Success!"
msgstr "¡Éxito!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "Contenido:"
+msgstr "Contenido del Paquete:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1374,9 +1372,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "Archivo inválido. No es un layout de bus de audio."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Error guardando archivo!"
+msgstr "Error guardando el archivo: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1954,14 +1951,39 @@ msgid "Inherited by:"
msgstr "Heredada por:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Descripción Breve"
+#, fuzzy
+msgid "Description"
+msgstr "Descripción:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Tutoriales en línea"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Actualmente no existen tutoriales para esta clase, podés [color=$color][url="
+"$url]contribuir uno[/url][/color] o [color=$color][url=$url2]solicitar uno[/"
+"url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Propiedades"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Reemplazos(Overrides)"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Por Defecto"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Métodos"
@@ -1974,36 +1996,19 @@ msgid "Enumerations"
msgstr "Enumeraciones"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Constantes"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Descripción de Clase"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Tutoriales en línea"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Actualmente no existen tutoriales para esta clase, podés [color=$color][url="
-"$url]contribuir uno[/url][/color] o [color=$color][url=$url2]solicitar uno[/"
-"url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Descripción de Propiedades"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Valor"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -5750,20 +5755,18 @@ msgstr "Máscara de Emisión"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "Achicar (Pixeles): "
+msgstr "Pixeles Sólidos"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Píxeles del Borde"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Directorios y Archivos:"
+msgstr "Píxeles del Borde Directos"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -10855,9 +10858,8 @@ msgid "Will load an existing script file."
msgstr "Se cargará un archivo de script existente."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "La división ya existe."
+msgstr "El archivo de script ya existe."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12553,11 +12555,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Color: #%s\n"
+"LMB: Configurar color\n"
+"RMB: Borrar configuración predeterminada"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Elegir un color de la pantalla."
+msgstr "Elegir un color de la ventana del editor."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12679,6 +12683,15 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice."
msgid "Constants cannot be modified."
msgstr "Las constantes no pueden modificarse."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Descripción Breve"
+
+#~ msgid "Class Description"
+#~ msgstr "Descripción de Clase"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "La exportación del proyecto falló con el código de error %d."
diff --git a/editor/translations/et.po b/editor/translations/et.po
index 656b354e9b..aab6358e01 100644
--- a/editor/translations/et.po
+++ b/editor/translations/et.po
@@ -1890,46 +1890,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1937,6 +1937,11 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Väärtus:"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/eu.po b/editor/translations/eu.po
index 4fe720ec38..403016ba49 100644
--- a/editor/translations/eu.po
+++ b/editor/translations/eu.po
@@ -1885,46 +1885,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1932,6 +1932,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index b1effff53c..72c8596b7f 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -2012,14 +2012,34 @@ msgstr "به ارث رسیده به وسیله:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "خلاصه توضیحات:"
+msgid "Description"
+msgstr "توضیح:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
#: editor/editor_help.cpp
msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Ù¾ÛŒØ´ÙØ±Ø¶"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "روش ها"
@@ -2033,33 +2053,18 @@ msgid "Enumerations"
msgstr "شمارش ها"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr ""
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "ثابت ها"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "توضیحات"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr ""
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
+msgid "Property Descriptions"
+msgstr "توضیحات مشخصه:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "توضیحات مشخصه:"
+msgid "(value)"
+msgstr "ارزش:"
#: editor/editor_help.cpp
msgid ""
@@ -12845,6 +12850,14 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "خلاصه توضیحات:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "توضیحات"
+
#~ msgid "Password:"
#~ msgstr "گذرواژه:"
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index 34eb8bac9b..55729dc95f 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-03 21:21+0000\n"
+"PO-Revision-Date: 2020-01-16 22:24+0000\n"
"Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/"
"godot/fi/>\n"
@@ -23,7 +23,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 3.10\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1190,9 +1190,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Virhe avattaessa pakettitiedostoa, ei ZIP-muodossa."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "On jo olemassa"
+msgstr "%s (on jo olemassa)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1203,9 +1202,8 @@ msgid "The following files failed extraction from package:"
msgstr "Seuraavien tiedostojen purku paketista epäonnistui:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "Vielä %d tiedostoa"
+msgstr "Ja vielä %s tiedostoa."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1217,9 +1215,8 @@ msgid "Success!"
msgstr "Onnistui!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "Sisällöt:"
+msgstr "Paketin sisältö:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1359,9 +1356,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "Virheellinen tiedosto. Tämä ei ole ääniväylän asettelu ensinkään."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Virhe tallennettaessa tiedostoa!"
+msgstr "Virhe tallennettaessa tiedostoa: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1940,14 +1936,39 @@ msgid "Inherited by:"
msgstr "Perivät:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Lyhyt kuvaus"
+#, fuzzy
+msgid "Description"
+msgstr "Kuvaus:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Online-oppaat"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Tälle luokalle ei vielä löydy kuvausta. Voit [color=$color][url=$url]auttaa "
+"luomalla sellaisen[/url][/color] tai [color=$color][url=$url2]pyytää "
+"sellaisen[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Ominaisuudet"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Ylikirjoittaa"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Oletus"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metodit"
@@ -1960,36 +1981,19 @@ msgid "Enumerations"
msgstr "Enumeraatiot"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Vakiot"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Luokan kuvaus"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Online-oppaat"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Tälle luokalle ei vielä löydy kuvausta. Voit [color=$color][url=$url]auttaa "
-"luomalla sellaisen[/url][/color] tai [color=$color][url=$url2]pyytää "
-"sellaisen[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Ominaisuuksien kuvaukset"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Arvo"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -5708,20 +5712,18 @@ msgstr "Emissiomaski"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "Kutista (pikseleissä): "
+msgstr "Kiinteät pikselit"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Reunapikselit"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Hakemistot ja tiedostot:"
+msgstr "Suunnatut reunapikselit"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -10804,9 +10806,8 @@ msgid "Will load an existing script file."
msgstr "Lataa olemassaolevan skriptitiedoston."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "Jako on jo olemassa."
+msgstr "Skriptitiedosto on jo olemassa."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12482,11 +12483,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Väri: #%s\n"
+"Vasen hiirenkorva: Aseta väri\n"
+"Oikea hiirenkorva: Poista esiasetus"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Valitse väri ruudulta."
+msgstr "Valitse väri editori-ikkunasta."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12608,6 +12611,15 @@ msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa."
msgid "Constants cannot be modified."
msgstr "Vakioita ei voi muokata."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Lyhyt kuvaus"
+
+#~ msgid "Class Description"
+#~ msgstr "Luokan kuvaus"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Projektin vienti epäonnistui virhekoodilla %d."
diff --git a/editor/translations/fil.po b/editor/translations/fil.po
index b77c4714dd..5d069ac803 100644
--- a/editor/translations/fil.po
+++ b/editor/translations/fil.po
@@ -1892,46 +1892,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1939,6 +1939,11 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Halaga:"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index 3b761bb777..799709c4b8 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -73,7 +73,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-03 21:21+0000\n"
+"PO-Revision-Date: 2020-01-16 22:32+0000\n"
"Last-Translator: Rémi Verschelde <akien@godotengine.org>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot/fr/>\n"
@@ -82,7 +82,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 3.10\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1264,9 +1264,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Erreur d'ouverture de paquetage, pas au format ZIP."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Existe déjà"
+msgstr "%s (existe déjà)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1277,9 +1276,8 @@ msgid "The following files failed extraction from package:"
msgstr "L'extraction des fichiers suivants depuis le paquetage a échoué :"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "%d fichiers supplémentaires"
+msgstr "Et %s fichiers supplémentaires."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1291,9 +1289,8 @@ msgid "Success!"
msgstr "Ça marche !"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "Contenu :"
+msgstr "Contenu du paquetage :"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1433,9 +1430,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "Fichier invalide, pas une disposition de bus audio."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Erreur lors de l'enregistrement du fichier !"
+msgstr "Erreur lors de l'enregistrement du fichier : %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -2013,14 +2009,36 @@ msgid "Inherited by:"
msgstr "Héritée par :"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Brève description"
+msgid "Description"
+msgstr "Description"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Tutoriels en ligne"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Il n'y a pas de tutoriels disponibles pour cette classe, vous pouvez [color="
+"$color][url=$url]en créer un[/url][/color] ou [color=$color][url=$url2]en "
+"demander un[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Propriétés"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr "redéfinition :"
+
+#: editor/editor_help.cpp
+msgid "default:"
+msgstr "par défaut :"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Méthodes"
@@ -2033,36 +2051,18 @@ msgid "Enumerations"
msgstr "Énumérations"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum_ "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Constantes"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Description de la classe"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Tutoriels en ligne"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Il n'y a pas de tutoriels disponibles pour cette classe, vous pouvez [color="
-"$color][url=$url]en créer un[/url][/color] ou [color=$color][url=$url2]en "
-"demander un[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Description des propriétés"
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr "(valeur)"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -5824,20 +5824,18 @@ msgstr "Masque d'émission"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "Rétrécir (Pixels) : "
+msgstr "Pixels pleins"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Pixels de bordure"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Répertoires et fichiers :"
+msgstr "Pixels de bordure orientés"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -10948,9 +10946,8 @@ msgid "Will load an existing script file."
msgstr "Va charger un fichier de script existant."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "Le fractionnement existe déjà."
+msgstr "Le fichier de script existe déjà."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12663,11 +12660,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Couleur : #%s\n"
+"Clic gauche : Définir la couleur\n"
+"Clic droit : Supprimer le pré-réglage"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Échantillonner une couleur depuis l'écran."
+msgstr "Échantillonner une couleur depuis la fenêtre de l'éditeur."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12791,6 +12790,15 @@ msgstr "Les variations ne peuvent être affectées que dans la fonction vertex."
msgid "Constants cannot be modified."
msgstr "Les constantes ne peuvent être modifiées."
+#~ msgid "enum "
+#~ msgstr "enum_ "
+
+#~ msgid "Brief Description"
+#~ msgstr "Brève description"
+
+#~ msgid "Class Description"
+#~ msgstr "Description de la classe"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "L'export du projet a échoué avec le code erreur %d."
diff --git a/editor/translations/ga.po b/editor/translations/ga.po
index b0876790ee..5ae3963052 100644
--- a/editor/translations/ga.po
+++ b/editor/translations/ga.po
@@ -1888,46 +1888,46 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "Cuntas:"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1935,6 +1935,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12046,3 +12050,7 @@ msgstr ""
#: servers/visual/shader_language.cpp
msgid "Constants cannot be modified."
msgstr "Ní féidir tairisigh a athrú."
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Cuntas:"
diff --git a/editor/translations/he.po b/editor/translations/he.po
index 18a22b51be..592952ad3c 100644
--- a/editor/translations/he.po
+++ b/editor/translations/he.po
@@ -2005,14 +2005,35 @@ msgstr "מוריש ×ל:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "תי×ור קצר:"
+msgid "Description"
+msgstr "תי×ור:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "×ž×¡×ž×›×™× ×ž×§×•×•× ×™×"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
#: editor/editor_help.cpp
msgid "Properties"
msgstr "מ×פייני×"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "טעינת בררת המחדל"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "שיטות"
@@ -2026,34 +2047,18 @@ msgid "Enumerations"
msgstr "מוני×"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "מונה "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "קבועי×"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "תי×ור"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "×ž×¡×ž×›×™× ×ž×§×•×•× ×™×"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
+msgid "Property Descriptions"
+msgstr "תי×ור המ×פיין:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "תי×ור המ×פיין:"
+msgid "(value)"
+msgstr "ערך:"
#: editor/editor_help.cpp
msgid ""
@@ -12702,6 +12707,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "מונה "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "תי×ור קצר:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "תי×ור"
+
#~ msgid "Password:"
#~ msgstr "ססמה:"
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
index b46c89c8eb..dbdbc182ec 100644
--- a/editor/translations/hi.po
+++ b/editor/translations/hi.po
@@ -1980,47 +1980,46 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "विवरण:"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Class Description"
-msgstr "विवरण:"
+msgid "Theme Properties"
+msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -2029,6 +2028,11 @@ msgid "Property Descriptions"
msgstr "विवरण:"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "मूलà¥à¤¯ :"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12358,6 +12362,14 @@ msgid "Constants cannot be modified."
msgstr ""
#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "विवरण:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "विवरण:"
+
+#, fuzzy
#~ msgid "Class Description:"
#~ msgstr "विवरण:"
diff --git a/editor/translations/hr.po b/editor/translations/hr.po
index f1a7f46b69..3b477c74fb 100644
--- a/editor/translations/hr.po
+++ b/editor/translations/hr.po
@@ -1902,46 +1902,46 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "Opis:"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1949,6 +1949,11 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Vrijednost:"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12102,3 +12107,7 @@ msgstr ""
#: servers/visual/shader_language.cpp
msgid "Constants cannot be modified."
msgstr ""
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Opis:"
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index 6571cdfcc6..cbf3298e16 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -2024,14 +2024,38 @@ msgstr "Åt örökli:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Rövid Leírás:"
+msgid "Description"
+msgstr "Leírás:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Online Oktatóanyagok:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Jelenleg nincsenek oktatóanyagok ehhez az osztályhoz. [color=$color][url="
+"$url]Hozzájárulhat eggyel[/url][/color], vagy [color=$color][url="
+"$url2]kérvényezhet egyet[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Tulajdonságok"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Alapértelmezett"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metódusok"
@@ -2045,37 +2069,18 @@ msgid "Enumerations"
msgstr "Felsorolások"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstansok"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "Leírás"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "Online Oktatóanyagok:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Jelenleg nincsenek oktatóanyagok ehhez az osztályhoz. [color=$color][url="
-"$url]Hozzájárulhat eggyel[/url][/color], vagy [color=$color][url="
-"$url2]kérvényezhet egyet[/url][/color]."
+msgid "Property Descriptions"
+msgstr "Tulajdonság Leírása:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Tulajdonság Leírása:"
+msgid "(value)"
+msgstr "Érték:"
#: editor/editor_help.cpp
msgid ""
@@ -12901,6 +12906,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Rövid Leírás:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Leírás"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Projekt export nem sikerült, hibakód %d."
diff --git a/editor/translations/id.po b/editor/translations/id.po
index 73e51a5cab..66847a39ac 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -1956,14 +1956,39 @@ msgid "Inherited by:"
msgstr "Diturunkan oleh:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Deskripsi Singkat"
+#, fuzzy
+msgid "Description"
+msgstr "Deskripsi:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Tutorial Daring"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Untuk saat ini tidak ada tutorial dalam kelas ini, anda bisa [color=$color]"
+"[url=$url]ikut berkontribusi[/url][/color] atau [color=$color][url="
+"$url2]memberikan usulan[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Properti Objek"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Menimpa"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Bawaan"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Fungsi"
@@ -1976,36 +2001,19 @@ msgid "Enumerations"
msgstr "Enumerasi"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstanta"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Deskripsi Kelas"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Tutorial Daring"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Untuk saat ini tidak ada tutorial dalam kelas ini, anda bisa [color=$color]"
-"[url=$url]ikut berkontribusi[/url][/color] atau [color=$color][url="
-"$url2]memberikan usulan[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Deskripsi Properti"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Nilai:"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12678,6 +12686,15 @@ msgstr "Variasi hanya bisa ditetapkan dalam fungsi vertex."
msgid "Constants cannot be modified."
msgstr "Konstanta tidak dapat dimodifikasi."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Deskripsi Singkat"
+
+#~ msgid "Class Description"
+#~ msgstr "Deskripsi Kelas"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Ekspor proyek gagal dengan kode kesalahan %d."
diff --git a/editor/translations/is.po b/editor/translations/is.po
index 5d3445d1c5..9a70a1051c 100644
--- a/editor/translations/is.po
+++ b/editor/translations/is.po
@@ -1923,46 +1923,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1970,6 +1970,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/it.po b/editor/translations/it.po
index deb6a489ef..c025271c39 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -1978,14 +1978,39 @@ msgid "Inherited by:"
msgstr "Ereditato da:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Breve descrizione"
+#, fuzzy
+msgid "Description"
+msgstr "Descrizione:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Tutorial Online"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Al momento non esiste alcuna descrizione per questa classe. Aiutaci [color="
+"$color][url=$url]aggiungendone una[/url][/color] oppure [color=$color][url="
+"$url2]richiedendone una[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Proprietà"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Sovrascrizioni"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Default"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metodi"
@@ -1998,36 +2023,19 @@ msgid "Enumerations"
msgstr "Enumerazioni"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Costanti"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Descrizione della classe"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Tutorial Online"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Al momento non esiste alcuna descrizione per questa classe. Aiutaci [color="
-"$color][url=$url]aggiungendone una[/url][/color] oppure [color=$color][url="
-"$url2]richiedendone una[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Descrizioni delle proprietà"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Valore"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12721,6 +12729,15 @@ msgstr "Varyings può essere assegnato soltanto nella funzione del vertice."
msgid "Constants cannot be modified."
msgstr "Le constanti non possono essere modificate."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Breve descrizione"
+
+#~ msgid "Class Description"
+#~ msgstr "Descrizione della classe"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Esportazione progetto fallita con codice di errore %d."
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 88a9cefed7..cd98aaa199 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -35,8 +35,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-12 13:25+0000\n"
-"Last-Translator: sporeball <sporeballdev@gmail.com>\n"
+"PO-Revision-Date: 2020-01-16 22:23+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"
@@ -44,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 3.10.1\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1964,14 +1964,39 @@ msgid "Inherited by:"
msgstr "継承先:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "è¦ç´„"
+#, fuzzy
+msgid "Description"
+msgstr "説明:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "オンラインãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"ç¾åœ¨ã€ã“ã®ã‚¯ãƒ©ã‚¹ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã‚りã¾ã›ã‚“ãŒã€[color=$color][url=$url]貢献"
+"[/url][/color]ã€ã¾ãŸã¯[color=$color][url=$url2]リクエスト[/url][/color]ã¯å¯èƒ½"
+"ã§ã™ã€‚"
#: editor/editor_help.cpp
msgid "Properties"
msgstr "プロパティ"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "上書ã"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "デフォルト"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "メソッド"
@@ -1984,36 +2009,19 @@ msgid "Enumerations"
msgstr "列挙型"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "列挙型 "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "定数"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "クラスã®èª¬æ˜Ž"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "オンラインãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"ç¾åœ¨ã€ã“ã®ã‚¯ãƒ©ã‚¹ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã‚りã¾ã›ã‚“ãŒã€[color=$color][url=$url]貢献"
-"[/url][/color]ã€ã¾ãŸã¯[color=$color][url=$url2]リクエスト[/url][/color]ã¯å¯èƒ½"
-"ã§ã™ã€‚"
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "プロパティã®èª¬æ˜Ž"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "値"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -5726,20 +5734,18 @@ msgstr "放出マスク"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "ç¸®å° (ピクセル): "
+msgstr "å‡é›†ãƒ”クセル"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "境界ピクセル"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "ディレクトリã¨ãƒ•ァイル:"
+msgstr "æ–¹å‘ã‚り境界ピクセル"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -12549,6 +12555,9 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"色: #%s\n"
+"左マウスボタン: 色をセット\n"
+"å³ãƒžã‚¦ã‚¹ãƒœã‚¿ãƒ³: プリセットã®é™¤åŽ»"
#: scene/gui/color_picker.cpp
#, fuzzy
@@ -12678,6 +12687,15 @@ msgstr "Varyingã¯é ‚点関数ã«ã®ã¿å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
msgid "Constants cannot be modified."
msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。"
+#~ msgid "enum "
+#~ msgstr "列挙型 "
+
+#~ msgid "Brief Description"
+#~ msgstr "è¦ç´„"
+
+#~ msgid "Class Description"
+#~ msgstr "クラスã®èª¬æ˜Ž"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "プロジェクトã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãŒã‚¨ãƒ©ãƒ¼ã‚³ãƒ¼ãƒ‰ %d ã§å¤±æ•—ã—ã¾ã—ãŸã€‚"
diff --git a/editor/translations/ka.po b/editor/translations/ka.po
index e937cd3daa..9f3631d0d9 100644
--- a/editor/translations/ka.po
+++ b/editor/translations/ka.po
@@ -1989,47 +1989,46 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Class Description"
-msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
+msgid "Theme Properties"
+msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -2038,6 +2037,10 @@ msgid "Property Descriptions"
msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12406,6 +12409,14 @@ msgid "Constants cannot be modified."
msgstr ""
#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
+
+#, fuzzy
#~ msgid "Class Description:"
#~ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index f16f432e28..5b234a28ee 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -19,7 +19,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-06 14:21+0000\n"
+"PO-Revision-Date: 2020-01-16 22:23+0000\n"
"Last-Translator: 송태섭 <xotjq237@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
@@ -28,7 +28,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 3.10\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1195,9 +1195,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "패키지 파ì¼ì„ 여는 중 오류. ZIP 형ì‹ì´ 아니ì—ìš”."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "ì´ë¯¸ 존재함"
+msgstr "%s (ì´ë¯¸ 존재함)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1208,9 +1207,8 @@ msgid "The following files failed extraction from package:"
msgstr "ë‹¤ìŒ íŒŒì¼ì„ 패키지ì—서 ì¶”ì¶œí•˜ëŠ”ë° ì‹¤íŒ¨í•¨:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "외 %dê°œì˜ íŒŒì¼"
+msgstr "외 %d ê°œì˜ íŒŒì¼."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1222,9 +1220,8 @@ msgid "Success!"
msgstr "성공!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "ë‚´ìš©:"
+msgstr "패키지 내용:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1364,9 +1361,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "ìž˜ëª»ëœ íŒŒì¼. 오디오 버스 ë ˆì´ì•„ì›ƒì´ ì•„ë‹ˆì—ìš”."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "íŒŒì¼ ì €ìž¥ 중 오류!"
+msgstr "íŒŒì¼ ì €ìž¥ 중 오류: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1938,14 +1934,39 @@ msgid "Inherited by:"
msgstr "ìƒì†í•œ í´ëž˜ìФ:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "간단한 설명"
+#, fuzzy
+msgid "Description"
+msgstr "설명:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "온ë¼ì¸ 튜토리얼"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"현재 ì´ í´ëž˜ìŠ¤ì— ëŒ€í•œ íŠœí† ë¦¬ì–¼ì´ ì—†ì–´ìš”. [color=$color][url=$url]íŠœí† ë¦¬ì–¼ì— "
+"기여하거나[/url][/color] [color=$color][url=$url2]íŠœí† ë¦¬ì–¼ì„ ìš”ì²­í•  수[/url]"
+"[/color] 있어요."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "ì†ì„±"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "다시 ì •ì˜í•˜ê¸°"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "기본"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "메서드"
@@ -1958,36 +1979,19 @@ msgid "Enumerations"
msgstr "ì—´ê±°"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "ì´ë„˜ "
-
-#: editor/editor_help.cpp
msgid "Constants"
-msgstr "ìƒìˆ˜"
-
-#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "í´ëž˜ìФ 설명"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "온ë¼ì¸ 튜토리얼"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"현재 ì´ í´ëž˜ìŠ¤ì— ëŒ€í•œ íŠœí† ë¦¬ì–¼ì´ ì—†ì–´ìš”. [color=$color][url=$url]íŠœí† ë¦¬ì–¼ì— "
-"기여하거나[/url][/color] [color=$color][url=$url2]íŠœí† ë¦¬ì–¼ì„ ìš”ì²­í•  수[/url]"
-"[/color] 있어요."
+msgstr "ìƒìˆ˜(Constant)"
#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "ì†ì„± 설명"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "ê°’"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -4375,7 +4379,7 @@ msgstr "오디오 í´ë¦½"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Functions"
-msgstr "함수"
+msgstr "함수(Function)"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_state_machine_editor.cpp
@@ -5673,20 +5677,18 @@ msgstr "ë°©ì¶œ 마스í¬"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "수축 (픽셀): "
+msgstr "전면 픽셀"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "í…Œë‘리 픽셀"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "디렉토리 & 파ì¼:"
+msgstr "ë°©í–¥ì„±ì´ ìžˆëŠ” í…Œë‘리 픽셀"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -10718,9 +10720,8 @@ msgid "Will load an existing script file."
msgstr "기존 스í¬ë¦½íЏ 파ì¼ì„ 불러와요."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "ì´ë¯¸ ë¶„í• ë˜ì—ˆìŠµë‹ˆë‹¤."
+msgstr "스í¬ë¦½íЏ 파ì¼ì´ ì´ë¯¸ 있어요."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12361,11 +12362,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"색ìƒ: #%s\n"
+"좌í´ë¦­: ìƒ‰ìƒ ì„¤ì •í•˜ê¸°\n"
+"ìš°í´ë¦­: 프리셋 제거하기"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "화면ì—서 색ìƒì„ ì„ íƒí•˜ì„¸ìš”."
+msgstr "편집기 ì°½ì—서 색ìƒì„ 고르세요."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12483,6 +12486,15 @@ msgstr "Varyingì€ ê¼­ì§“ì  í•¨ìˆ˜ì—ë§Œ 지정할 수 있어요."
msgid "Constants cannot be modified."
msgstr "ìƒìˆ˜ëŠ” 수정할 수 없어요."
+#~ msgid "enum "
+#~ msgstr "ì´ë„˜ "
+
+#~ msgid "Brief Description"
+#~ msgstr "간단한 설명"
+
+#~ msgid "Class Description"
+#~ msgstr "í´ëž˜ìФ 설명"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "프로ì íЏ ë‚´ë³´ë‚´ê¸°ì— ì‹¤íŒ¨í–ˆì–´ìš”. 오류 코드%d."
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index c9de0179b1..233f6a850e 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -1956,47 +1956,46 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "Aprašymas:"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Class Description"
-msgstr "Aprašymas:"
+msgid "Theme Properties"
+msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -2005,6 +2004,11 @@ msgid "Property Descriptions"
msgstr "Aprašymas:"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Naujas pavadinimas:"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12393,6 +12397,14 @@ msgid "Constants cannot be modified."
msgstr ""
#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Aprašymas:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Aprašymas:"
+
+#, fuzzy
#~ msgid "Class Description:"
#~ msgstr "Aprašymas:"
diff --git a/editor/translations/lv.po b/editor/translations/lv.po
index 63da6e5725..e255b6edfc 100644
--- a/editor/translations/lv.po
+++ b/editor/translations/lv.po
@@ -1959,47 +1959,47 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "Apraksts:"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
-msgstr ""
+#, fuzzy
+msgid "default:"
+msgstr "IelÄdÄ“t NoklusÄ“jumu"
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Class Description"
-msgstr "Apraksts:"
+msgid "Theme Properties"
+msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -2008,6 +2008,10 @@ msgid "Property Descriptions"
msgstr "Apraksts:"
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12358,6 +12362,14 @@ msgid "Constants cannot be modified."
msgstr ""
#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Apraksts:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Apraksts:"
+
+#, fuzzy
#~ msgid "Class Description:"
#~ msgstr "Apraksts:"
diff --git a/editor/translations/mi.po b/editor/translations/mi.po
index 77c0a220e3..4359913c26 100644
--- a/editor/translations/mi.po
+++ b/editor/translations/mi.po
@@ -1878,46 +1878,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1925,6 +1925,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/ml.po b/editor/translations/ml.po
index 765164a24b..ed53a3535c 100644
--- a/editor/translations/ml.po
+++ b/editor/translations/ml.po
@@ -1888,46 +1888,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1935,6 +1935,11 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "വില:"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/mr.po b/editor/translations/mr.po
index 972c843a62..2094400280 100644
--- a/editor/translations/mr.po
+++ b/editor/translations/mr.po
@@ -1884,46 +1884,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1931,6 +1931,11 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "मूलà¥à¤¯:"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/ms.po b/editor/translations/ms.po
index 8e5602be96..b2433b0a2f 100644
--- a/editor/translations/ms.po
+++ b/editor/translations/ms.po
@@ -1907,46 +1907,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1954,6 +1954,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index d4f7d1ec99..2768de9c40 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -2050,14 +2050,39 @@ msgstr "Arvet av:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Kort beskrivelse:"
+msgid "Description"
+msgstr "Beskrivelse:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Online dokumentasjon:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Det finnes i øyeblikket ingen beskrivelse av denne metoden, men du kan "
+"[colour=$color][url=$url]bidra med en[/url][/color] eller [color=$color][url="
+"$url2]be om en[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Egenskaper"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Overskriv"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Standard"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metoder"
@@ -2071,37 +2096,18 @@ msgid "Enumerations"
msgstr "Nummereringer"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "num "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstanter"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "Beskrivelse"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "Online dokumentasjon:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Det finnes i øyeblikket ingen beskrivelse av denne metoden, men du kan "
-"[colour=$color][url=$url]bidra med en[/url][/color] eller [color=$color][url="
-"$url2]be om en[/url][/color]."
+msgid "Property Descriptions"
+msgstr "Egenskapsbeskrivelse:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Egenskapsbeskrivelse:"
+msgid "(value)"
+msgstr "Verdi:"
#: editor/editor_help.cpp
msgid ""
@@ -13031,6 +13037,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstanter kan ikke endres."
+#~ msgid "enum "
+#~ msgstr "num "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Kort beskrivelse:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Beskrivelse"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Eksport av prosjektet mislyktes med feilkode %d."
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index 87f02bce48..1b59654e9d 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -1976,14 +1976,39 @@ msgid "Inherited by:"
msgstr "Geërfd door:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Korte Omschrijving"
+#, fuzzy
+msgid "Description"
+msgstr "Omschrijving:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Online Zelfstudie"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Er is momenteel geen handleiding voor deze methode. Help ons alsjeblieft "
+"door [color=$color][url=$url]een toe te voegen[/url][/color] of [color="
+"$color][url=$url2]een aan te vragen[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Eigenschappen"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Overschrijvers"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Standaard"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Methodes"
@@ -1996,36 +2021,19 @@ msgid "Enumerations"
msgstr "Enumeraties"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Constanten"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Klassebeschrijving"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Online Zelfstudie"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Er is momenteel geen handleiding voor deze methode. Help ons alsjeblieft "
-"door [color=$color][url=$url]een toe te voegen[/url][/color] of [color="
-"$color][url=$url2]een aan te vragen[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Eigenschap Beschrijvingen"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Waarde"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12682,6 +12690,15 @@ msgstr "Varyings kunnen alleen worden toegewezenin vertex functies."
msgid "Constants cannot be modified."
msgstr "Constanten kunnen niet worden aangepast."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Korte Omschrijving"
+
+#~ msgid "Class Description"
+#~ msgstr "Klassebeschrijving"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Project exporteren faalt door foutcode %d."
diff --git a/editor/translations/or.po b/editor/translations/or.po
index 881d3aee64..46e6a4fa48 100644
--- a/editor/translations/or.po
+++ b/editor/translations/or.po
@@ -1884,46 +1884,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1931,6 +1931,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 25d7a396af..3a165db4ed 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -42,7 +42,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-03 21:21+0000\n"
+"PO-Revision-Date: 2020-01-16 22:23+0000\n"
"Last-Translator: Tomek <kobewi4e@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot/pl/>\n"
@@ -52,7 +52,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 3.10\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1223,9 +1223,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Błąd otwierania pliku pakietu, nie jest w formacie ZIP."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Już istnieje"
+msgstr "%s (już istnieje)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1236,9 +1235,8 @@ msgid "The following files failed extraction from package:"
msgstr "Nie powiodło się wypakowanie z pakietu następujących plików:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "Pozostało %d plików"
+msgstr "I jeszcze %s plików."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1250,9 +1248,8 @@ msgid "Success!"
msgstr "Sukces!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "Zawartość:"
+msgstr "Zawartość paczki:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1392,9 +1389,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "Plik niepoprawny, nie jest układem magistral audio."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Błąd zapisywania pliku!"
+msgstr "Błąd zapisywania pliku: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1966,14 +1962,39 @@ msgid "Inherited by:"
msgstr "Dziedziczone przez:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Krótki opis"
+#, fuzzy
+msgid "Description"
+msgstr "Opis:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Poradniki online"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Obecnie nie ma żadnych samouczków dla tej klasy, możesz [color=$color][url="
+"$url]dodać jeden[/url][/color] lub [color=$color][url=$url2]poprosić o "
+"jakiÅ›[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Właściwości"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Nadpisuje"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Domyślny"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metody"
@@ -1986,36 +2007,19 @@ msgid "Enumerations"
msgstr "Wyliczenia"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Stałe"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Opis klasy"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Poradniki online"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Obecnie nie ma żadnych samouczków dla tej klasy, możesz [color=$color][url="
-"$url]dodać jeden[/url][/color] lub [color=$color][url=$url2]poprosić o "
-"jakiÅ›[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Opisy właściwości"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Wartość"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -5741,20 +5745,18 @@ msgstr "Maska emisji"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "Zmniejsz (piksele): "
+msgstr "Widoczne piksele"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Brzegowe piksele"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Katalogi i pliki:"
+msgstr "Skierowane brzegowe piksele"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -10834,9 +10836,8 @@ msgid "Will load an existing script file."
msgstr "Wczytaj istniejÄ…cy plik skryptu."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "Podział już istnieje."
+msgstr "Plik skryptu już istnieje."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12517,11 +12518,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Kolor: #%s\n"
+"LPM: Ustaw ten kolor\n"
+"PPM: Usuń próbkę"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Pobierz kolor z ekranu."
+msgstr "Pobierz kolor z okna edytora."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12641,6 +12644,15 @@ msgstr "Varying może być przypisane tylko w funkcji wierzchołków."
msgid "Constants cannot be modified."
msgstr "Stałe nie mogą być modyfikowane."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Krótki opis"
+
+#~ msgid "Class Description"
+#~ msgstr "Opis klasy"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Eksport projektu nie powiódł się, kod błędu to %d."
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index b46588aa01..b5855bd1a1 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -1954,49 +1954,48 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "Yar, Blow th' Selected Down!"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Theme Properties"
-msgstr "Paste yer Node"
+msgid "Properties"
+msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Enumerations"
-msgstr "Yer functions:"
+msgid "override:"
+msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "Yar, Blow th' Selected Down!"
+msgid "Theme Properties"
+msgstr "Paste yer Node"
#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr ""
+#, fuzzy
+msgid "Enumerations"
+msgstr "Yer functions:"
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -2004,6 +2003,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12456,6 +12459,10 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Yar, Blow th' Selected Down!"
+
#~ msgid "Base Type:"
#~ msgstr "th' Base Type:"
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index 212e1ceae1..407e23f94e 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -78,12 +78,13 @@
# Zeero <igcdzeero@gmail.com>, 2019.
# Gian Penna <gianfrancopen@gmail.com>, 2020.
# sribgui <sribgui@gmail.com>, 2020.
+# patrickvob <patrickvob@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: 2016-05-30\n"
-"PO-Revision-Date: 2020-01-03 21:21+0000\n"
-"Last-Translator: sribgui <sribgui@gmail.com>\n"
+"PO-Revision-Date: 2020-01-16 22:23+0000\n"
+"Last-Translator: patrickvob <patrickvob@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
"Language: pt_BR\n"
@@ -91,7 +92,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 3.10\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -238,11 +239,11 @@ msgstr "Alterar Tempo de Quadro-Chave da Anim Multi"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Transition"
-msgstr "Alterar Transição da Animação Múltipla"
+msgstr "Transição de Animação com Múltiplas Mudanças"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Transform"
-msgstr "Alterar Transformação da Animação Múltipla"
+msgstr "Transformação de Animação com Múltiplas Mudanças"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Keyframe Value"
@@ -344,7 +345,7 @@ msgstr "Tempo (s): "
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
-msgstr "Alternar Trilha Ativado"
+msgstr "Habilitar/Desabilitar Trilha"
#: editor/animation_track_editor.cpp
msgid "Continuous"
@@ -492,7 +493,7 @@ msgstr "Não é possível adicionar uma nova trilha sem uma raiz"
#: editor/animation_track_editor.cpp
msgid "Invalid track for Bezier (no suitable sub-properties)"
-msgstr "trajeto inválido para Bézier (sem subpropriedades adequadas)"
+msgstr "Trilha inválida para Bézier (sem subpropriedades adequadas)"
#: editor/animation_track_editor.cpp
msgid "Add Bezier Track"
@@ -508,7 +509,7 @@ msgstr "Trilha não é do tipo Espacial,não pode inserir chave"
#: editor/animation_track_editor.cpp
msgid "Add Transform Track Key"
-msgstr "Adicionar Chave de Transformação de Trilha"
+msgstr "Adicionar Chave de Trilha de Transformação"
#: editor/animation_track_editor.cpp
msgid "Add Track Key"
@@ -521,7 +522,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Add Method Track Key"
-msgstr "Adicionar Chave de Trilha de Chamada de Método"
+msgstr "Adicionar Chave de Trilha de Método"
#: editor/animation_track_editor.cpp
msgid "Method not found in object: "
@@ -732,7 +733,7 @@ msgstr "Adicionar Clipe de Trilha de Ãudio"
#: editor/animation_track_editor_plugins.cpp
msgid "Change Audio Track Clip Start Offset"
-msgstr "Alterar Deslocamento do Início de Clipe da Trilha de Ãudio"
+msgstr "Alterar Offset de Início do Clipe da Trilha de Ãudio"
#: editor/animation_track_editor_plugins.cpp
msgid "Change Audio Track Clip End Offset"
@@ -1262,9 +1263,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Erro ao abrir arquivo compactado, não está no formato ZIP."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Já existe"
+msgstr "%s (Já existe)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1275,9 +1275,8 @@ msgid "The following files failed extraction from package:"
msgstr "Os arquivos a seguir falharam ao serem extraídos do pacote:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "%d mais arquivo(s)"
+msgstr "%s mais arquivo(s)."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1289,7 +1288,6 @@ msgid "Success!"
msgstr "Sucesso!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
msgstr "Conteúdo:"
@@ -1431,9 +1429,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "Arquivo inválido, não é um layout de canais de áudio."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Erro ao salvar o arquivo!"
+msgstr "Erro ao salvar o arquivo: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1441,7 +1438,7 @@ msgstr "Adicionar Canal"
#: editor/editor_audio_buses.cpp
msgid "Add a new Audio Bus to this layout."
-msgstr "Adicionar novo Canal de Ãudio a esse layout."
+msgstr "Adicionar novo Canal de Ãudio a este layout."
#: editor/editor_audio_buses.cpp editor/editor_properties.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp
@@ -2007,14 +2004,39 @@ msgid "Inherited by:"
msgstr "Herdado por:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Breve Descrição"
+#, fuzzy
+msgid "Description"
+msgstr "Descrição:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Tutoriais Online"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Atualmente não há tutoriais para essa classe. Você pode [color=$color][url="
+"$url]contribuir criando um[/url][/color] ou [color=$color][url="
+"$url2]solicitar[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Propriedades"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Sobrescreve"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Padrão"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Métodos"
@@ -2027,36 +2049,19 @@ msgid "Enumerations"
msgstr "Enumerações"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Constantes"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Descrição da Classe"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Tutoriais Online"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Atualmente não há tutoriais para essa classe. Você pode [color=$color][url="
-"$url]contribuir criando um[/url][/color] ou [color=$color][url="
-"$url2]solicitar[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Descrições da Propriedade"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Valor"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -2143,7 +2148,7 @@ msgstr "Propriedade"
#: editor/editor_help_search.cpp
msgid "Theme Property"
-msgstr "Propriedades do Tema"
+msgstr "Propriedade do Tema"
#: editor/editor_inspector.cpp editor/project_settings_editor.cpp
msgid "Property:"
@@ -3118,11 +3123,11 @@ msgid ""
"preset."
msgstr ""
"Isso irá configurar seu projeto para compilações customizadas do Android "
-"instalando o modelo de origem para \"res://android/build\".\n"
+"instalando o template raíz em \"res://android/build\".\n"
"Em seguida, você pode aplicar modificações e compilar seu próprio APK "
-"customizado na exportação (Adicionando módulos, alterando o AndroidManifest."
+"customizado na exportação (adicionando módulos, alterando o AndroidManifest."
"xml, etc.).\n"
-"Note que para fazer uma compilação customizada, em vez de usar APKs pre-"
+"Note que para fazer uma compilação customizada em vez de usar APKs pre-"
"compilados, a opção \"Usar compilação customizada\" deve estar ativa nas "
"predefinições de exportação do Android."
@@ -5272,8 +5277,8 @@ msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
msgstr ""
-"Filhos de contêineres tem suas ancoragens e valores de margem sobrescritos "
-"pelos seus pais."
+"Filhos de contêineres tem suas posições e margens sobrescritos pelos seus "
+"pais."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Presets for the anchors and margins values of a Control node."
@@ -5342,11 +5347,11 @@ msgstr "Inferior Largo"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "VCenter Wide"
-msgstr "Visão Centralizada Verticalmente"
+msgstr "Centro Vertical Largo"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "HCenter Wide"
-msgstr "Visão Centralizada Horizontalmente"
+msgstr "Centro Horizontal Largo"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Full Rect"
@@ -5795,20 +5800,18 @@ msgstr "Máscara de Emissão"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "Diminuir (Pixels): "
+msgstr "Pixels Sólidos"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Pixels de Borda"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Diretórios & Arquivos:"
+msgstr "Pixels de Borda Direcionados"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -6999,7 +7002,7 @@ msgstr "Marcadores"
#: editor/plugins/script_text_editor.cpp
msgid "Breakpoints"
-msgstr "Pontos de interrupção(Breakpoints)"
+msgstr "Breakpoints"
#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
@@ -7622,7 +7625,7 @@ msgstr "Visualizar Polígono De Colisão 2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create LightOccluder2D"
-msgstr "Criar OclusorDeLuz2D"
+msgstr "Criar LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "LightOccluder2D Preview"
@@ -7799,7 +7802,7 @@ msgstr "Selecionar/Deselecionar Todos os Frames"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Create Frames from Sprite Sheet"
-msgstr "Criar Frames a partir da Planilha de Sprites"
+msgstr "Criar Frames a partir da Sprite Sheet"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "SpriteFrames"
@@ -7928,7 +7931,7 @@ msgstr "Item Rádio Marcado"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Named Sep."
-msgstr "Sep. Nomeado"
+msgstr "Sep. Nomeado."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Submenu"
@@ -8058,7 +8061,7 @@ msgstr "Filtros do tile"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Give a TileSet resource to this TileMap to use its tiles."
-msgstr "Atribua um recurso TileSet a este TileMap para usar seus tiles."
+msgstr "Atribua um recurso de TileSet a este TileMap para usar seus tiles."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint Tile"
@@ -8078,11 +8081,11 @@ msgstr "Pegar Tile"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate Left"
-msgstr "Rotacionar para a esquerda"
+msgstr "Girar à esquerda"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate Right"
-msgstr "Rotacionar para a direita"
+msgstr "Girar à direita"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Flip Horizontally"
@@ -10889,9 +10892,8 @@ msgid "Will load an existing script file."
msgstr "Carregará arquivo de script existente."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "A ação \"%s\" já existe!"
+msgstr "O arquivo de script já existe."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12570,11 +12572,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Cor: #%s\n"
+"LMB: Escolher cor\n"
+"RMB: Remover preset"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Escolha uma cor da tela."
+msgstr "Escolha uma cor da janela do editor."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12696,6 +12700,15 @@ msgstr "Variáveis só podem ser atribuídas na função de vértice."
msgid "Constants cannot be modified."
msgstr "Constantes não podem serem modificadas."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Breve Descrição"
+
+#~ msgid "Class Description"
+#~ msgstr "Descrição da Classe"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Falha na exportação do projeto com código de erro %d."
diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po
index f0728bd81d..ed2cd4b083 100644
--- a/editor/translations/pt_PT.po
+++ b/editor/translations/pt_PT.po
@@ -19,7 +19,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-03 21:21+0000\n"
+"PO-Revision-Date: 2020-01-13 13:36+0000\n"
"Last-Translator: João Lopes <linux-man@hotmail.com>\n"
"Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_PT/>\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 3.10\n"
+"X-Generator: Weblate 3.10.1\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1202,9 +1202,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Erro ao abrir ficheiro comprimido, não está no formato ZIP."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Já existe"
+msgstr "%s (Já Existe)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1215,9 +1214,8 @@ msgid "The following files failed extraction from package:"
msgstr "Falhou a extração dos seguintes Ficheiros do pacote:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "%d mais Ficheiros"
+msgstr "E mais %s ficheiros."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1229,9 +1227,8 @@ msgid "Success!"
msgstr "Sucesso!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "Conteúdos:"
+msgstr "Conteúdo do Pacote:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1371,9 +1368,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "Ficheiro inválido, não é um Modelo válido de barramento de áudio."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Erro ao guardar ficheiro!"
+msgstr "Erro ao guardar ficheiro: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1949,14 +1945,39 @@ msgid "Inherited by:"
msgstr "Herdado por:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Breve Descrição"
+#, fuzzy
+msgid "Description"
+msgstr "Descrição:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Tutoriais Online"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Atualmente não existem tutoriais para esta classe, pode [color=$color][url="
+"$url]contribuir com um[/url][/color] ou [color=$color][url=$url2]solicitar "
+"um[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Propriedades"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Sobrepõe"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Padrão"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Métodos"
@@ -1969,36 +1990,19 @@ msgid "Enumerations"
msgstr "Enumerações"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Constantes"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Descrição da Classe"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Tutoriais Online"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Atualmente não existem tutoriais para esta classe, pode [color=$color][url="
-"$url]contribuir com um[/url][/color] ou [color=$color][url=$url2]solicitar "
-"um[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Descrições da Propriedade"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Valor"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -4475,7 +4479,7 @@ msgstr "Renomear Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
-msgstr "Misturar seguinte alterado"
+msgstr "Misturar Seguinte Alterado"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
@@ -4636,7 +4640,7 @@ msgstr "Tempos de Mistura:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
-msgstr "Próximo (auto-fila):"
+msgstr "Próximo (Auto-Fila):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
@@ -5025,7 +5029,7 @@ msgstr "Anterior"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Next"
-msgstr "Proximo"
+msgstr "Próximo"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Last"
@@ -5721,20 +5725,18 @@ msgstr "Máscara de Emissão"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "Encolher (Pixeis): "
+msgstr "Pixeis Sólidos"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Pixeis da Margem"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Diretorias e Ficheiros:"
+msgstr "Pixeis da Margem Dirigidos"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -6727,7 +6729,7 @@ msgstr "Histórico Anterior"
#: editor/plugins/script_editor_plugin.cpp
msgid "History Next"
-msgstr "Histórico seguinte"
+msgstr "Histórico Seguinte"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -7602,7 +7604,7 @@ msgstr "Encolher (Pixeis): "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Grow (Pixels): "
-msgstr "Crescer (Pixeis): "
+msgstr "Aumentar (Pixeis): "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -10802,9 +10804,8 @@ msgid "Will load an existing script file."
msgstr "Vai carregar ficheiro de script existente."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "Separação já existe."
+msgstr "Ficheiro Script já existe."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -10884,7 +10885,7 @@ msgstr "Inspecionar instância anterior"
#: editor/script_editor_debugger.cpp
msgid "Inspect Next Instance"
-msgstr "Inspecionar próxima instância"
+msgstr "Inspecionar Próxima Instância"
#: editor/script_editor_debugger.cpp
msgid "Stack Frames"
@@ -11158,11 +11159,11 @@ msgstr "Objeto não fornece um comprimento."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
-msgstr "Plano seguinte"
+msgstr "Plano Seguinte"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Previous Plane"
-msgstr "Plano anterior"
+msgstr "Plano Anterior"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Plane:"
@@ -12480,11 +12481,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Cor: #%s\n"
+"LMB: Definir color\n"
+"RMB: Remover predefinição"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Escolha uma cor do ecrã."
+msgstr "Escolha uma cor através do editor."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12605,6 +12608,15 @@ msgstr "Variações só podem ser atribuídas na função vértice."
msgid "Constants cannot be modified."
msgstr "Constantes não podem ser modificadas."
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#~ msgid "Brief Description"
+#~ msgstr "Breve Descrição"
+
+#~ msgid "Class Description"
+#~ msgstr "Descrição da Classe"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Exportação do projeto falhou com código de erro %d."
diff --git a/editor/translations/ro.po b/editor/translations/ro.po
index 6625e3a8b4..90200bbe58 100644
--- a/editor/translations/ro.po
+++ b/editor/translations/ro.po
@@ -2027,14 +2027,38 @@ msgstr "MoÅŸtenit de:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Descriere Scurtă:"
+msgid "Description"
+msgstr "Descriere:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Tutoriale Internet:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Nu există în prezent nici un tutorial pentru această clasă, puteţi [culoare "
+"= $color] [url = $url] contribui unul [/ URL] [/ color] sau [culoare = "
+"$color] [url = $url2] cerere unul[/ URL] [/ color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Proprietăți"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Implicit"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metode"
@@ -2048,37 +2072,18 @@ msgid "Enumerations"
msgstr "Enumerări"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Constante"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "Descriere"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "Tutoriale Internet:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Nu există în prezent nici un tutorial pentru această clasă, puteţi [culoare "
-"= $color] [url = $url] contribui unul [/ URL] [/ color] sau [culoare = "
-"$color] [url = $url2] cerere unul[/ URL] [/ color]."
+msgid "Property Descriptions"
+msgstr "Descriere Proprietate:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Descriere Proprietate:"
+msgid "(value)"
+msgstr "Valoare:"
#: editor/editor_help.cpp
msgid ""
@@ -12865,6 +12870,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Descriere Scurtă:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Descriere"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Exportul de proiect nu a reuÅŸit cu un cod de eroare %d."
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index 67e54e0a3b..7d7e5f2f74 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -56,17 +56,18 @@
# КонÑтантин Рин <email.to.rean@gmail.com>, 2019.
# Maxim Samburskiy <alpacones@outlook.com>, 2019.
# Dima Koshel <form.eater@gmail.com>, 2019.
-# Danil Alexeev <danil@alexeev.xyz>, 2019.
+# Danil Alexeev <danil@alexeev.xyz>, 2019, 2020.
# Ravager <al.porkhunov@gmail.com>, 2019.
# ÐлекÑандр <akonn7@mail.ru>, 2019.
# Rei <clxgamer12@gmail.com>, 2019.
# Vitaly <arkology11@gmail.com>, 2019.
+# Andy <8ofproject@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-03 21:21+0000\n"
-"Last-Translator: Vladislav <onion.ring@mail.ru>\n"
+"PO-Revision-Date: 2020-01-16 22:24+0000\n"
+"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
"Language: ru\n"
@@ -75,7 +76,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 3.10\n"
+"X-Generator: Weblate 3.10.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -187,7 +188,7 @@ msgstr "Добавить точку Безье"
#: editor/animation_bezier_editor.cpp
msgid "Move Bezier Points"
-msgstr "Передвинуть Точку Безье"
+msgstr "Передвинуть точки Безье"
#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp
msgid "Anim Duplicate Keys"
@@ -222,14 +223,17 @@ msgid "Anim Multi Change Keyframe Time"
msgstr "Ð’Ñ€ÐµÐ¼Ñ Ñмены ключевых кадров анимации"
#: editor/animation_track_editor.cpp
+#, fuzzy
msgid "Anim Multi Change Transition"
msgstr "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ ÐœÐ½Ð¾Ð³Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð¾Ðµ изменение Переход"
#: editor/animation_track_editor.cpp
+#, fuzzy
msgid "Anim Multi Change Transform"
msgstr "Ðнимационное многоÑменное преобразование"
#: editor/animation_track_editor.cpp
+#, fuzzy
msgid "Anim Multi Change Keyframe Value"
msgstr "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð¾Ðµ изменение ключевых кадров Значение"
@@ -244,31 +248,31 @@ msgstr "Изменить длину анимации"
#: editor/animation_track_editor.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation Loop"
-msgstr "Изменить цикличноÑть анимации"
+msgstr "Изменить цикл анимации"
#: editor/animation_track_editor.cpp
msgid "Property Track"
-msgstr "Трек Параметра"
+msgstr "Трек параметра"
#: editor/animation_track_editor.cpp
msgid "3D Transform Track"
-msgstr "Трек 3D ПреобразованиÑ"
+msgstr "Трек 3D преобразованиÑ"
#: 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)"
@@ -280,7 +284,7 @@ msgstr "ПродолжительноÑть анимации (в Ñекундах
#: editor/animation_track_editor.cpp
msgid "Add Track"
-msgstr "Добавить новый Трек"
+msgstr "Добавить новый трек"
#: editor/animation_track_editor.cpp
msgid "Animation Looping"
@@ -297,7 +301,7 @@ msgstr "Ðудиодорожки:"
#: editor/animation_track_editor.cpp
msgid "Anim Clips:"
-msgstr "Дорожки Ðнимации:"
+msgstr "Дорожки анимации:"
#: editor/animation_track_editor.cpp
msgid "Change Track Path"
@@ -392,7 +396,7 @@ msgstr "Изменить метод интерполÑции анимации"
#: editor/animation_track_editor.cpp
msgid "Change Animation Loop Mode"
-msgstr "Изменить Режим Цикла Ðнимации"
+msgstr "Изменить режим цикла анимации"
#: editor/animation_track_editor.cpp
msgid "Remove Anim Track"
@@ -428,11 +432,11 @@ msgstr "AnimationPlayer не может анимировать Ñам ÑебÑ,
#: 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"
@@ -440,11 +444,11 @@ msgstr "Ð’Ñтавить ключ"
#: editor/animation_track_editor.cpp
msgid "Change Animation Step"
-msgstr "Изменить Шаг Ðнимации"
+msgstr "Изменить шаг анимации"
#: editor/animation_track_editor.cpp
msgid "Rearrange Tracks"
-msgstr "ПереÑтавить Дорожки"
+msgstr "ПереÑтавить дорожки"
#: editor/animation_track_editor.cpp
msgid "Transform tracks only apply to Spatial-based nodes."
@@ -481,7 +485,7 @@ msgstr "Ðеверный трек Ð´Ð»Ñ ÐºÑ€Ð¸Ð²Ð¾Ð¹ Безье (нет подÑ
#: editor/animation_track_editor.cpp
msgid "Add Bezier Track"
-msgstr "Добавить Дорожку Безье"
+msgstr "Добавить дорожку Безье"
#: editor/animation_track_editor.cpp
msgid "Track path is invalid, so can't add a key."
@@ -493,11 +497,11 @@ msgstr "Трек не имеет тип Spatial, Ð½ÐµÐ»ÑŒÐ·Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ‚ÑŒ Ð
#: editor/animation_track_editor.cpp
msgid "Add Transform Track Key"
-msgstr "Добавить Ключ ОтÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¢Ñ€Ð°Ð½Ñформации"
+msgstr "Добавить ключ дорожки преобразованиÑ"
#: editor/animation_track_editor.cpp
msgid "Add Track Key"
-msgstr "Добавить Ключ Дорожки"
+msgstr "Добавить ключ дорожки"
#: editor/animation_track_editor.cpp
msgid "Track path is invalid, so can't add a method key."
@@ -521,7 +525,7 @@ msgstr "Буфер обмена пуÑÑ‚"
#: editor/animation_track_editor.cpp
msgid "Paste Tracks"
-msgstr "Ð’Ñтавить Треки"
+msgstr "Ð’Ñтавить треки"
#: editor/animation_track_editor.cpp
msgid "Anim Scale Keys"
@@ -605,7 +609,7 @@ msgstr "СвойÑтва анимации."
#: editor/animation_track_editor.cpp
msgid "Copy Tracks"
-msgstr "Копировать Треки"
+msgstr "Копировать треки"
#: editor/animation_track_editor.cpp
msgid "Scale Selection"
@@ -718,15 +722,15 @@ msgstr "Добавить звуковую дорожку"
#: editor/animation_track_editor_plugins.cpp
msgid "Change Audio Track Clip Start Offset"
-msgstr "Изменение Ðачального Сдвига Ðудио Дорожки"
+msgstr "Изменение начального Ñдвига аудио дорожки"
#: editor/animation_track_editor_plugins.cpp
msgid "Change Audio Track Clip End Offset"
-msgstr "Изменение Конечного Сдвига Ðудио Дорожки"
+msgstr "Изменение конечного Ñдвига аудио дорожки"
#: editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr "Изменить размер МаÑÑива"
+msgstr "Изменить размер маÑÑива"
#: editor/array_property_edit.cpp
msgid "Change Array Value Type"
@@ -823,7 +827,7 @@ msgstr ""
#: editor/connections_dialog.cpp
msgid "Connect to Node:"
-msgstr "ПриÑоединить к Узлу:"
+msgstr "ПриÑоединить к узлу:"
#: editor/connections_dialog.cpp
msgid "Connect to Script:"
@@ -863,9 +867,8 @@ msgid "Extra Call Arguments:"
msgstr "Дополнительные параметры вызова:"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Receiver Method:"
-msgstr "Выбрать метод"
+msgstr "Метод-приёмник:"
#: editor/connections_dialog.cpp
msgid "Advanced"
@@ -915,7 +918,7 @@ msgstr "ПриÑоединить"
#: editor/connections_dialog.cpp
msgid "Signal:"
-msgstr "Сигналы:"
+msgstr "Сигнал:"
#: editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
@@ -940,11 +943,11 @@ msgstr "ОтÑоединить"
#: editor/connections_dialog.cpp
msgid "Connect a Signal to a Method"
-msgstr "Подключить Сигнал к Методу"
+msgstr "Подключить Ñигнал к методу"
#: editor/connections_dialog.cpp
msgid "Edit Connection:"
-msgstr "Редактировать Подключение:"
+msgstr "Редактировать подключение:"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from the \"%s\" signal?"
@@ -964,11 +967,11 @@ msgstr "ОтÑоединить вÑе"
#: editor/connections_dialog.cpp
msgid "Edit..."
-msgstr "Редактирование..."
+msgstr "Редактировать..."
#: editor/connections_dialog.cpp
msgid "Go To Method"
-msgstr "Перейти к Методу"
+msgstr "Перейти к методу"
#: editor/create_dialog.cpp
msgid "Change %s Type"
@@ -1162,7 +1165,7 @@ msgstr "СпаÑибо от ÑообщеÑтва Godot!"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr "Ðвторы Движка Godot"
+msgstr "Ðвторы Godot Engine"
#: editor/editor_about.cpp
msgid "Project Founders"
@@ -1170,7 +1173,7 @@ msgstr "ОÑнователи Проекта"
#: editor/editor_about.cpp
msgid "Lead Developer"
-msgstr "Ведущий Разработчик"
+msgstr "Ведущий разработчик"
#: editor/editor_about.cpp
msgid "Project Manager "
@@ -1186,27 +1189,27 @@ msgstr "Ðвторы"
#: editor/editor_about.cpp
msgid "Platinum Sponsors"
-msgstr "Платиновые СпонÑоры"
+msgstr "Платиновые ÑпонÑоры"
#: editor/editor_about.cpp
msgid "Gold Sponsors"
-msgstr "Золотые СпонÑоры"
+msgstr "Золотые ÑпонÑоры"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr "Мини СпонÑоры"
+msgstr "Мини ÑпонÑоры"
#: editor/editor_about.cpp
msgid "Gold Donors"
-msgstr "Золотые Доноры"
+msgstr "Золотые доноры"
#: editor/editor_about.cpp
msgid "Silver Donors"
-msgstr "СеребрÑные Доноры"
+msgstr "СеребрÑные доноры"
#: editor/editor_about.cpp
msgid "Bronze Donors"
-msgstr "Бронзовые Доноры"
+msgstr "Бронзовые доноры"
#: editor/editor_about.cpp
msgid "Donors"
@@ -1249,9 +1252,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Ошибка при открытии файла пакета, не в формате zip."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Уже ÑущеÑтвует"
+msgstr "%s (Уже ÑущеÑтвует)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1262,9 +1264,8 @@ msgid "The following files failed extraction from package:"
msgstr "Следующие файлы не удалоÑÑŒ извлечь из пакета:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "Ещё %d файла(ов)"
+msgstr "Ещё %d файла(ов)."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1276,9 +1277,8 @@ msgid "Success!"
msgstr "УÑпех!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "Содержание:"
+msgstr "Содержимое пакета:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1418,9 +1418,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "ÐедопуÑтимый файл, не раÑкладка аудио шины."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Ошибка при Ñохранении файла!"
+msgstr "Ошибка при Ñохранении файла: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1537,7 +1536,7 @@ msgstr "Путь:"
#: editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr "Ð˜Ð¼Ñ Ð£Ð·Ð»Ð°:"
+msgstr "Ð˜Ð¼Ñ ÑƒÐ·Ð»Ð°:"
#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp
#: editor/editor_profiler.cpp editor/project_manager.cpp
@@ -1894,7 +1893,7 @@ msgstr "Скрыть файлы"
#: editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
-msgstr "Переключить Избранное"
+msgstr "Переключить избранное"
#: editor/editor_file_dialog.cpp
msgid "Toggle Mode"
@@ -1996,14 +1995,39 @@ msgid "Inherited by:"
msgstr "УнаÑледован:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Краткое опиÑание"
+#, fuzzy
+msgid "Description"
+msgstr "ОпиÑание:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Онлайн-уроки"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÑутÑтвуют учебники Ð´Ð»Ñ Ñтого клаÑÑа, вы можете его "
+"[color=$color][url=$url]добавить[/url][/color] или [color=$color][url="
+"$url2]запроÑить[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "СвойÑтва"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Переопределить"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "По умолчанию"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Методы"
@@ -2016,36 +2040,19 @@ msgid "Enumerations"
msgstr "ПеречиÑлениÑ"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "перечиÑление "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "КонÑтанты"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "ОпиÑание клаÑÑа"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Онлайн-уроки"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÑутÑтвуют учебники Ð´Ð»Ñ Ñтого клаÑÑа, вы можете его "
-"[color=$color][url=$url]добавить[/url][/color] или [color=$color][url="
-"$url2]запроÑить[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "ОпиÑание ÑвойÑтв"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Значение"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -2075,9 +2082,8 @@ msgid "Case Sensitive"
msgstr "ЧувÑтвительноÑть региÑтра"
#: editor/editor_help_search.cpp
-#, fuzzy
msgid "Show Hierarchy"
-msgstr "Показывать помощники"
+msgstr "Показывать иерархию"
#: editor/editor_help_search.cpp
msgid "Display All"
@@ -2116,9 +2122,8 @@ msgid "Class"
msgstr "КлаÑÑ"
#: editor/editor_help_search.cpp
-#, fuzzy
msgid "Method"
-msgstr "Методы"
+msgstr "Метод"
#: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp
msgid "Signal"
@@ -2129,14 +2134,12 @@ msgid "Constant"
msgstr "КонÑтанта"
#: editor/editor_help_search.cpp
-#, fuzzy
msgid "Property"
-msgstr "Параметр:"
+msgstr "Параметр"
#: editor/editor_help_search.cpp
-#, fuzzy
msgid "Theme Property"
-msgstr "СвойÑтва темы"
+msgstr "СвойÑтво темы"
#: editor/editor_inspector.cpp editor/project_settings_editor.cpp
msgid "Property:"
@@ -2148,7 +2151,7 @@ msgstr "Задать"
#: editor/editor_inspector.cpp
msgid "Set Multiple:"
-msgstr "УÑтановить МножеÑтво:"
+msgstr "Задать неÑколько:"
#: editor/editor_log.cpp
msgid "Output:"
@@ -2225,7 +2228,7 @@ msgstr "Импортированные реÑурÑÑ‹ не могут быть Ñ
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: scene/gui/dialogs.cpp
msgid "OK"
-msgstr "Ок"
+msgstr "OK"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Error saving resource!"
@@ -2986,7 +2989,7 @@ msgstr "ПоиÑк"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/shader_editor_plugin.cpp
msgid "Online Docs"
-msgstr "Онлайн ДокументациÑ"
+msgstr "Онлайн документациÑ"
#: editor/editor_node.cpp
msgid "Q&A"
@@ -3147,7 +3150,7 @@ msgstr "Открыть и запуÑтить Ñкрипт"
#: editor/editor_node.cpp
msgid "New Inherited"
-msgstr "ÐÐ¾Ð²Ð°Ñ ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¡Ñ†ÐµÐ½Ð°"
+msgstr "ÐÐ¾Ð²Ð°Ñ ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñцена"
#: editor/editor_node.cpp
msgid "Load Errors"
@@ -3182,9 +3185,8 @@ msgid "Open the previous Editor"
msgstr "Открыть предыдущий редактор"
#: editor/editor_node.h
-#, fuzzy
msgid "Warning!"
-msgstr "Предупреждение"
+msgstr "Внимание!"
#: editor/editor_path.cpp
msgid "No sub-resources found."
@@ -3428,7 +3430,7 @@ msgstr "Быть может вы забыли метод _run()?"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr "Выберите Узел(узлы) Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°"
+msgstr "Выберите узлы Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°"
#: editor/editor_sub_scene.cpp editor/project_manager.cpp
msgid "Browse"
@@ -3440,7 +3442,7 @@ msgstr "Путь к Ñцене:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr "Импортировать из Узла:"
+msgstr "Импортировать из узла:"
#: editor/export_template_manager.cpp
msgid "Redownload"
@@ -3504,14 +3506,13 @@ msgid "Importing:"
msgstr "ИмпортируетÑÑ:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error getting the list of mirrors."
-msgstr "Ошибка при Ñоздании объекта подпиÑи."
+msgstr "Ошибка при получении ÑпиÑка зеркал."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Error parsing JSON of mirror list. Please report this issue!"
-msgstr "Ошибка разбора ÑпиÑка зеркал. ПожалуйÑта, Ñообщите об Ñтой проблеме!"
+msgstr ""
+"Ошибка парÑинга JSON ÑпиÑка зеркал. ПожалуйÑта, Ñообщите об Ñтой проблеме!"
#: editor/export_template_manager.cpp
msgid ""
@@ -3649,7 +3650,7 @@ msgstr "Менеджер шаблонов ÑкÑпорта"
#: editor/export_template_manager.cpp
msgid "Download Templates"
-msgstr "Загрузить Шаблоны"
+msgstr "Загрузить шаблоны"
#: editor/export_template_manager.cpp
msgid "Select mirror from list: (Shift+Click: Open in Browser)"
@@ -3934,7 +3935,7 @@ msgstr "Фильтр узлов"
#: editor/groups_editor.cpp
msgid "Nodes in Group"
-msgstr "Узлы в Группе"
+msgstr "Узлы в группе"
#: editor/groups_editor.cpp
msgid "Empty groups will be automatically removed."
@@ -3946,7 +3947,7 @@ msgstr "Редактор групп"
#: editor/groups_editor.cpp
msgid "Manage Groups"
-msgstr "Управление Группами"
+msgstr "Управление группами"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
@@ -4159,11 +4160,11 @@ msgstr "Редактировать плагин"
#: editor/plugin_config_dialog.cpp
msgid "Create a Plugin"
-msgstr "Создать Дополнение"
+msgstr "Создать дополнение"
#: editor/plugin_config_dialog.cpp
msgid "Plugin Name:"
-msgstr "Ð˜Ð¼Ñ Ð”Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ:"
+msgstr "Ð˜Ð¼Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ:"
#: editor/plugin_config_dialog.cpp
msgid "Subfolder:"
@@ -4175,7 +4176,7 @@ msgstr "Язык:"
#: editor/plugin_config_dialog.cpp
msgid "Script Name:"
-msgstr "Ð˜Ð¼Ñ Ð¡ÐºÑ€Ð¸Ð¿Ñ‚Ð°:"
+msgstr "Ð˜Ð¼Ñ Ñкрипта:"
#: editor/plugin_config_dialog.cpp
msgid "Activate now?"
@@ -4184,7 +4185,7 @@ msgstr "Ðктивировать ÑейчаÑ?"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Polygon"
-msgstr "Создать Полигон"
+msgstr "Создать полигон"
#: editor/plugins/abstract_polygon_2d_editor.cpp
#: editor/plugins/animation_blend_space_1d_editor.cpp
@@ -4217,11 +4218,11 @@ msgstr "Ð’Ñтавить точку"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Edit Polygon (Remove Point)"
-msgstr "Редактировать Полигон (удалить точку)"
+msgstr "Редактировать полигон (удалить точку)"
#: editor/plugins/abstract_polygon_2d_editor.cpp
msgid "Remove Polygon And Point"
-msgstr "Удалить Полигон и Точку"
+msgstr "Удалить полигон и точку"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4319,7 +4320,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."
@@ -4347,7 +4348,7 @@ msgstr "Удалить треугольник BlendSpace2D"
#: 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."
@@ -4413,7 +4414,7 @@ msgstr "Узлы разъединены"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Set Animation"
-msgstr "Задать Ðнимацию"
+msgstr "Задать анимацию"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -4526,7 +4527,7 @@ msgstr "Изменена поÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
-msgstr "Изменить Ð²Ñ€ÐµÐ¼Ñ \"ÑмешиваниÑ\""
+msgstr "Изменить Ð²Ñ€ÐµÐ¼Ñ ÑмешиваниÑ"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
@@ -4602,7 +4603,7 @@ msgstr "Редактировать переходы..."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Open in Inspector"
-msgstr "Открыть в ИнÑпекторе"
+msgstr "Открыть в инÑпекторе"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
@@ -4696,9 +4697,8 @@ msgid "Move Node"
msgstr "ПеремеÑтить узел"
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition exists!"
-msgstr "Переходы"
+msgstr "Переход уже ÑущеÑтвует!"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Add Transition"
@@ -4786,9 +4786,8 @@ msgid "Transition: "
msgstr "Переход: "
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Play Mode:"
-msgstr "Режим оÑмотра"
+msgstr "Режим воÑпроизведениÑ:"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -4937,7 +4936,7 @@ msgstr "Содержание:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "View Files"
-msgstr "ПроÑмотр Файлов"
+msgstr "ПроÑмотр файлов"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
@@ -5005,7 +5004,7 @@ msgstr "Ðе удалоÑÑŒ проверить sha256 Ñ…Ñш"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr "Ошибка Загрузки Шаблона:"
+msgstr "Ошибка загрузки шаблона:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading (%s / %s)..."
@@ -5049,7 +5048,7 @@ msgstr "Ðедавно обновлённые"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Least Recently Updated"
-msgstr "ПоÑледнее обновление"
+msgstr "Давно обновлённые"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Name (A-Z)"
@@ -5178,12 +5177,11 @@ msgstr "Шаг Ñетки:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Primary Line Every:"
-msgstr "ÐŸÐµÑ€Ð²Ð¸Ñ‡Ð½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ ÐšÐ°Ð¶Ð´Ð°Ñ:"
+msgstr "Ð–Ð¸Ñ€Ð½Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ñ‹Ðµ:"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "steps"
-msgstr "шаги"
+msgstr "шагов"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Offset:"
@@ -5271,62 +5269,61 @@ msgstr "Слева вверху"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Right"
-msgstr "Верхнее право"
+msgstr "Справа вверху"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Bottom Right"
-msgstr "Ðижнее право"
+msgstr "Справа внизу"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Bottom Left"
-msgstr "Ðижнее левое"
+msgstr "Слева внизу"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Left"
-msgstr "Центр Слева"
+msgstr "Слева по центру"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Top"
-msgstr "Топ-центр"
+msgstr "Вверху поÑередине"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Right"
-msgstr "Центральное право"
+msgstr "Справа по центру"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Bottom"
-msgstr "Центральное дно"
+msgstr "Внизу поÑередине"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center"
-msgstr "Центр"
+msgstr "По центру"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Left Wide"
-msgstr "Ðалево Широко"
+msgstr "Слева по вÑей выÑоте"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Wide"
-msgstr "Широчайший Ñпектр"
+msgstr "Сверху по вÑей ширине"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Right Wide"
-msgstr "ÐŸÑ€Ð°Ð²Ð°Ñ Ð¨Ð¸Ñ€Ð¾Ñ‚Ð°"
+msgstr "Справа по вÑей выÑоте"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Bottom Wide"
-msgstr "Широкий нижний край"
+msgstr "Снизу по вÑей ширине"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "VCenter Wide"
-msgstr "V Центр Широкий"
+msgstr "ПоÑередине по вÑей выÑоте"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "HCenter Wide"
-msgstr "H Центр Широкий"
+msgstr "По центру по вÑей ширине"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Full Rect"
msgstr "Полный прÑмоугольник"
@@ -5353,7 +5350,7 @@ msgid ""
"Overrides game camera with editor viewport camera."
msgstr ""
"Переопределение игровой камеры\n"
-"ПереопределÑет игровую камеру Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ камеры редактора вью-порта."
+"ПереопределÑет игровую камеру камерой редактора viewport."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5499,7 +5496,7 @@ msgstr "ИÑпользовать привÑзку к Ñетке"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snapping Options"
-msgstr "Параметры ПривÑзки"
+msgstr "Параметры привÑзки"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
@@ -5507,7 +5504,7 @@ msgstr "ИÑпользовать привÑзку вращениÑ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Scale Snap"
-msgstr "ИÑпользовать умную привÑзку"
+msgstr "ИÑпользовать привÑзку маÑштабированиÑ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
@@ -5580,11 +5577,11 @@ msgstr "Показать коÑти"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make Custom Bone(s) from Node(s)"
-msgstr "Сделать ПользовательÑкие КоÑть(и) от Узла(ов)"
+msgstr "Сделать пользовательÑкие коÑть(и) от узла(ов)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Custom Bones"
-msgstr "ОчиÑтить ПользовательÑкие КоÑти"
+msgstr "ОчиÑтить пользовательÑкие коÑти"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5777,7 +5774,7 @@ msgstr "МаÑка излучениÑ"
#: editor/plugins/particles_2d_editor_plugin.cpp
#, fuzzy
msgid "Solid Pixels"
-msgstr "Сжатие (пикÑели): "
+msgstr "Твёрдые пикÑели"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -5788,7 +5785,7 @@ msgstr ""
#: editor/plugins/particles_2d_editor_plugin.cpp
#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Каталоги и файлы:"
+msgstr "Ðаправленные граничные пикÑели"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -5802,7 +5799,7 @@ msgstr "Цвета излучениÑ"
#: editor/plugins/cpu_particles_editor_plugin.cpp
msgid "CPUParticles"
-msgstr "ЦПУЧаÑтицы"
+msgstr "CPU ЧаÑтицы"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
@@ -5815,14 +5812,12 @@ msgid "Create Emission Points From Node"
msgstr "Создать излучатель из узла"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Flat 0"
-msgstr "ПлоÑкий0"
+msgstr "ПлоÑкий 0"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Flat 1"
-msgstr "ПлоÑкий1"
+msgstr "ПлоÑкий 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -6020,25 +6015,24 @@ msgid "Outline Size:"
msgstr "Размер обводки:"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "UV Channel Debug"
-msgstr "Отладка УФ канала"
+msgstr "Отладка UV канала"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Remove item %d?"
msgstr "Удалить Ñлемент %d?"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid ""
"Update from existing scene?:\n"
"%s"
-msgstr "Обновить из Ñцены"
+msgstr ""
+"Обновить из ÑущеÑтвующей Ñцены?:\n"
+"%s"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Mesh Library"
-msgstr "Библиотека полиÑеток..."
+msgstr "Библиотека полиÑеток"
#: editor/plugins/mesh_library_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -6183,7 +6177,7 @@ msgstr "Грани данной геометрии не Ñодержат никÐ
#: editor/plugins/particles_editor_plugin.cpp
#, fuzzy
msgid "The geometry doesn't contain any faces."
-msgstr "Узел не Ñодержит геометрии (грани)."
+msgstr "Ð”Ð°Ð½Ð½Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ð½Ðµ Ñодержит граней."
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't inherit from Spatial."
@@ -6211,7 +6205,7 @@ msgstr "Точки поверхноÑти"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points+Normal (Directed)"
-msgstr "Точки поверхноÑти + Ðормаль(ÐаправленнаÑ)"
+msgstr "Точки поверхноÑти + Ðормаль (направленнаÑ)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
@@ -6223,7 +6217,7 @@ msgstr "ИÑточник излучениÑ: "
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr "ТребуетÑÑ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð» типа 'ParticlesMaterial'."
+msgstr "ТребуетÑÑ Ð¼Ð°Ñ‚ÐµÑ€Ð¸Ð°Ð» типа 'ParticlesMaterial'."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generating AABB"
@@ -6278,7 +6272,7 @@ msgstr "Выбрать точки"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Drag: Выбрать точки управлениÑ"
+msgstr "Shift+Тащить: Выбрать точки управлениÑ"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6301,7 +6295,7 @@ msgstr "Выбор точек ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (Shift+Тащить)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Add Point (in empty space)"
-msgstr "Добавить точку (в пуÑтом проÑтранÑтрве)"
+msgstr "Добавить точку (в пуÑтом проÑтранÑтве)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6400,7 +6394,7 @@ msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Polygon & UV"
-msgstr "Создать Полигон и UV"
+msgstr "Создать полигон и UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Internal Vertex"
@@ -6412,7 +6406,7 @@ msgstr "Удалить внутреннюю вершину"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Invalid Polygon (need 3 different vertices)"
-msgstr "Ðекорректный Полигон (требуетÑÑ 3 различные вершины)"
+msgstr "Ðекорректный полигон (требуетÑÑ 3 различные вершины)"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Add Custom Polygon"
@@ -6460,7 +6454,7 @@ msgstr "КоÑти"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Move Points"
-msgstr "Передвинуть Точку"
+msgstr "Передвинуть точки"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6627,7 +6621,7 @@ msgstr "Путь к AnimationPlayer недейÑтвительный"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Files"
-msgstr "ОчиÑтить Ðедавние Файлы"
+msgstr "ОчиÑтить недавние файлы"
#: editor/plugins/script_editor_plugin.cpp
msgid "Close and save changes?"
@@ -6682,9 +6676,8 @@ msgid "Script failed reloading, check console for errors."
msgstr "Ðе удалоÑÑŒ перезагрузить Ñкрипт, проверьте конÑоль на наличие ошибок."
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Script is not in tool mode, will not be able to run."
-msgstr "Скрипт не находитÑÑ Ð² режиме инÑтрумента, запуÑк невозможен."
+msgstr "Скрипт не в режиме инÑтрумента, запуÑк невозможен."
#: editor/plugins/script_editor_plugin.cpp
msgid ""
@@ -6970,7 +6963,7 @@ msgstr "ПропиÑные"
#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
msgid "Syntax Highlighter"
-msgstr "ПодÑветка СинтакÑиÑа"
+msgstr "ПодÑветка ÑинтакÑиÑа"
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
@@ -7239,7 +7232,7 @@ msgstr "Вид Ñверху."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View."
-msgstr "Вид Снизу."
+msgstr "Вид Ñнизу."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom"
@@ -7278,14 +7271,12 @@ msgid "Rear"
msgstr "Зад"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Align Transform with View"
-msgstr "ВыравнÑть Ñ Ð¾Ð±Ð»Ð°Ñтью проÑмотра"
+msgstr "ВыравнÑть преобразование Ñ Ð¾Ð±Ð»Ð°Ñтью проÑмотра"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Align Rotation with View"
-msgstr "СовмеÑтить выбранное Ñ Ð²Ð¸Ð´Ð¾Ð¼"
+msgstr "ВыравнÑть поворот Ñ Ð¾Ð±Ð»Ð°Ñтью проÑмотра"
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
@@ -7340,9 +7331,8 @@ msgid "Audio Listener"
msgstr "ПроÑлушиватель звука"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Enable Doppler"
-msgstr "Включить фильтр"
+msgstr "Включить Ñффект Doppler"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Cinematic Preview"
@@ -7377,9 +7367,8 @@ msgid "Freelook Speed Modifier"
msgstr "Обзор модификатор ÑкороÑти"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Slow Modifier"
-msgstr "Обзор модификатор ÑкороÑти"
+msgstr "Медленный модификатор Ñвободного проÑмотра"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -7426,7 +7415,7 @@ msgstr "ИÑпользовать привÑзку"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
-msgstr "Вид Снизу"
+msgstr "Вид Ñнизу"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View"
@@ -7584,43 +7573,39 @@ msgstr "ПоÑле"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Nameless gizmo"
-msgstr "БезымÑÐ½Ð½Ð°Ñ ÑˆÑ‚ÑƒÐºÐ¾Ð²Ð¸Ð½Ð°"
+msgstr "БезымÑнный гизмо"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
msgstr "Создать Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Mesh2D Preview"
-msgstr "Создание предпроÑмотра"
+msgstr "ПредпроÑмотр Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Polygon2D"
msgstr "Создать Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Polygon2D Preview"
-msgstr "Предварительный проÑмотр Polygon2D"
+msgstr "ПредпроÑмотр Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create CollisionPolygon2D"
msgstr "Создать CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "CollisionPolygon2D Preview"
-msgstr "Создать CollisionPolygon2D"
+msgstr "ПредпроÑмотр CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create LightOccluder2D"
msgstr "Создан LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "LightOccluder2D Preview"
-msgstr "Создан LightOccluder2D"
+msgstr "ПредпроÑмотр LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite is empty!"
@@ -7653,19 +7638,16 @@ msgstr ""
"ÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ, Ð½ÐµÐ»ÑŒÐ·Ñ Ñоздать полигональную Ñетку Ñтолкновений."
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create CollisionPolygon2D Sibling"
-msgstr "Создать полигон Ñтолкновений"
+msgstr "Создать ÑоÑедний CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Invalid geometry, can't create light occluder."
-msgstr "ÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ, не может быть заменена Ñеткой."
+msgstr "ÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ, невозможно Ñоздать окклюдер."
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create LightOccluder2D Sibling"
-msgstr "Создан затенÑющий полигон"
+msgstr "Создать ÑоÑедний LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite"
@@ -7704,9 +7686,8 @@ msgid "Add Frame"
msgstr "Добавить кадр"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Unable to load images"
-msgstr "Ðевозможно загрузить изображение:"
+msgstr "Ðевозможно загрузить изображениÑ"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "ERROR: Couldn't load frame resource!"
@@ -7766,11 +7747,11 @@ msgstr "Добавить кадры из Ñпрайт-лиÑта"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
-msgstr "Ð’Ñтавить пуÑтоту (До)"
+msgstr "Ð’Ñтавить пуÑтоту (до)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (After)"
-msgstr "Ð’Ñтавить пуÑтоту (ПоÑле)"
+msgstr "Ð’Ñтавить пуÑтоту (поÑле)"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Move (Before)"
@@ -7847,7 +7828,7 @@ msgstr "Разделитель:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "TextureRegion"
-msgstr "ОблаÑтьТекÑтуры"
+msgstr "ОблаÑть текÑтуры"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add All Items"
@@ -8112,23 +8093,20 @@ msgid "Merge from Scene"
msgstr "СлиÑние из Ñцены"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "New Single Tile"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ°"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "New Autotile"
-msgstr "Отключить автотайлы"
+msgstr "Ðовый автотайл"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "New Atlas"
-msgstr "ÐтлаÑÑ‹:"
+msgstr "Ðовый атлаÑ"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Next Coordinate"
-msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÐšÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð°"
+msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð°"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Select the next shape, subtile, or Tile."
@@ -8136,46 +8114,39 @@ msgstr "Выберите Ñледующую фигуру, Ñлемент тайÐ
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Previous Coordinate"
-msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ ÐšÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð°"
+msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ ÐºÐ¾Ð¾Ñ€Ð´Ð¸Ð½Ð°Ñ‚Ð°"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Select the previous shape, subtile, or Tile."
msgstr "Выберите предыдущую форму, Ñлемент тайла или тайл."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Region"
-msgstr "Режим региона"
+msgstr "Регион"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Collision"
-msgstr "Режим ÑтолкновениÑ"
+msgstr "Столкновение"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occlusion"
-msgstr "Режим перекрытиÑ"
+msgstr "Перекрытие"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Navigation"
-msgstr "Режим навигации"
+msgstr "ÐавигациÑ"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Bitmask"
-msgstr "Режим битовой маÑки"
+msgstr "Ð‘Ð¸Ñ‚Ð¾Ð²Ð°Ñ Ð¼Ð°Ñка"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Priority"
-msgstr "Режим приоритета"
+msgstr "Приоритет"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Z Index"
-msgstr "ИндекÑ:"
+msgstr "Положение по оÑи Z"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Region Mode"
@@ -8298,7 +8269,6 @@ msgid "Delete polygon."
msgstr "Удалить полигон."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid ""
"LMB: Set bit on.\n"
"RMB: Set bit off.\n"
@@ -8307,6 +8277,7 @@ msgid ""
msgstr ""
"ЛКМ: уÑтановить бит.\n"
"ПКМ: ÑнÑть бит.\n"
+"Shift+ЛКМ: уÑтановить бит подÑтановки.\n"
"Ðажмите на другой тайл чтобы его отредактировать."
#: editor/plugins/tile_set_editor_plugin.cpp
@@ -8345,7 +8316,7 @@ msgstr "Создать тайл"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Set Tile Icon"
-msgstr "УÑтановить Иконку Плитки"
+msgstr "Задать иконку тайла"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Tile Bitmask"
@@ -8353,7 +8324,7 @@ msgstr "Редактировать битовую маÑку тайла"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Collision Polygon"
-msgstr "Редактирование полигона Ñтолкновений"
+msgstr "Редактировать полигон Ñтолкновений"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Occlusion Polygon"
@@ -8361,7 +8332,7 @@ msgstr "Редактировать полигон перекрытиÑ"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Navigation Polygon"
-msgstr "Редактирование полигона навигации"
+msgstr "Редактирование полигон навигации"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Paste Tile Bitmask"
@@ -8369,15 +8340,15 @@ msgstr "Ð’Ñтавить битовую маÑку тайла"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Clear Tile Bitmask"
-msgstr "ОчиÑтить Битовую МаÑку Плитки"
+msgstr "ОчиÑтить битовую маÑку тайла"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Make Polygon Concave"
-msgstr "Сделать Полигон Вогнутым"
+msgstr "Сделать полигон вогнутым"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Make Polygon Convex"
-msgstr "Сделать Полигон Выпуклым"
+msgstr "Сделать полигон выпуклым"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Tile"
@@ -8406,12 +8377,12 @@ msgstr "Редактирование Z индекÑа плитки"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
msgid "Make Convex"
-msgstr "Сделать Полигон Выпуклым"
+msgstr "Сделать Convex"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
msgid "Make Concave"
-msgstr "Сделать Полигон Вогнутым"
+msgstr "Сделать Concave"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create Collision Polygon"
@@ -8427,7 +8398,7 @@ msgstr "Это ÑвойÑтво не может быть изменено."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "TileSet"
-msgstr "Ðабор Тайлов"
+msgstr "Ðабор тайлов"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "No VCS addons are available."
@@ -8512,14 +8483,12 @@ msgid "Status"
msgstr "СтатуÑ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "View file diffs before committing them to the latest version"
msgstr "ПроÑмотр различий в файлах перед коммитом"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No file diff is active"
-msgstr "Файлы не выбраны!"
+msgstr "Ðет выбранных изменений"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect changes in file diff"
@@ -8591,7 +8560,7 @@ msgstr "Изменить размеры узла визуального шейд
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Uniform Name"
-msgstr "Задать единообразное имÑ"
+msgstr "Задать Ð¸Ð¼Ñ uniform"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Input Default Port"
@@ -8599,7 +8568,7 @@ msgstr "Задать входной порт по умолчанию"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add Node to Visual Shader"
-msgstr "Добавить Узел в Визуальный Шейдер"
+msgstr "Добавить узел в визуальный шейдер"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8616,7 +8585,7 @@ msgstr "Удалить узлы"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Input Type Changed"
-msgstr "Изменен тип ввода Визуального Шейдера"
+msgstr "Изменен тип ввода визуального шейдера"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -8681,7 +8650,7 @@ msgstr "Оператор выцветаниÑ."
#: editor/plugins/visual_shader_editor_plugin.cpp
#, fuzzy
msgid "HardLight operator."
-msgstr "Оператор жёÑткого Ñвета"
+msgstr "Оператор жёÑткого Ñвета."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Lighten operator."
@@ -8902,7 +8871,7 @@ msgstr "ВычиÑлÑет ближайшее целое чиÑло, большÐ
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Constrains a value to lie between two further values."
-msgstr "Ограничивает значение лежать между Ð´Ð²ÑƒÐ¼Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ значениÑми."
+msgstr "Удерживает значение в пределах двух других значений."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the cosine of the parameter."
@@ -9393,22 +9362,21 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "VisualShader"
-msgstr "Визуальный Шейдер"
+msgstr "Визуальный шейдер"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Edit Visual Property"
-msgstr "Редактировать Визуальное СвойÑтво"
+msgstr "Редактировать визуальное ÑвойÑтво"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
-msgstr "Режим Визуального Шейдера был изменен"
+msgstr "Режим визуального шейдера был изменен"
#: editor/project_export.cpp
msgid "Runnable"
msgstr "Ðктивный"
#: editor/project_export.cpp
-#, fuzzy
msgid "Add initial export..."
msgstr "Добавить начальный ÑкÑпорт..."
@@ -9418,7 +9386,7 @@ msgstr "Добавить предыдущие патчи..."
#: editor/project_export.cpp
msgid "Delete patch '%s' from list?"
-msgstr "Удалить латку '%s' из ÑпиÑка?"
+msgstr "Удалить патч '%s' из ÑпиÑка?"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
@@ -9521,11 +9489,11 @@ msgstr ""
#: editor/project_export.cpp
msgid "Patches"
-msgstr "Латки"
+msgstr "Патчи"
#: editor/project_export.cpp
msgid "Make Patch"
-msgstr "Создать латку"
+msgstr "Создать патч"
#: editor/project_export.cpp
msgid "Pack File"
@@ -9533,7 +9501,7 @@ msgstr "Файл пакета"
#: editor/project_export.cpp
msgid "Features"
-msgstr "ОÑобенноÑти"
+msgstr "СвойÑтва"
#: editor/project_export.cpp
msgid "Custom (comma-separated):"
@@ -9936,7 +9904,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
-msgstr "Ключ "
+msgstr "Клавиша "
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -9968,7 +9936,7 @@ msgstr "Переименовать дейÑтвие"
#: editor/project_settings_editor.cpp
msgid "Change Action deadzone"
-msgstr "Изменить ДейÑтвие мертвой зоны"
+msgstr "Изменить мёртвую зону дейÑтвиÑ"
#: editor/project_settings_editor.cpp
msgid "Add Input Action Event"
@@ -9984,11 +9952,11 @@ msgstr "УÑтройÑтво"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
-msgstr "Ðажмите любую клавишу..."
+msgstr "Ðажмите клавишу..."
#: editor/project_settings_editor.cpp
msgid "Mouse Button Index:"
-msgstr "Ð˜Ð½Ð´ÐµÐºÑ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ мыши:"
+msgstr "Ð˜Ð½Ð´ÐµÐºÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ мыши:"
#: editor/project_settings_editor.cpp
msgid "Left Button"
@@ -10121,7 +10089,7 @@ msgstr "Добавить дейÑтвие"
#: editor/project_settings_editor.cpp
msgid "Override for Feature"
-msgstr "Переопределение СвойÑтва"
+msgstr "Переопределение ÑвойÑтва"
#: editor/project_settings_editor.cpp
msgid "Add Translation"
@@ -10189,7 +10157,7 @@ msgstr "ДейÑтвие"
#: editor/project_settings_editor.cpp
msgid "Deadzone"
-msgstr "ÐœÐµÑ€Ñ‚Ð²Ð°Ñ Ð·Ð¾Ð½Ð°"
+msgstr "ÐœÑ‘Ñ€Ñ‚Ð²Ð°Ñ Ð·Ð¾Ð½Ð°"
#: editor/project_settings_editor.cpp
msgid "Device:"
@@ -10357,7 +10325,7 @@ msgid ""
"Compare counter options."
msgstr ""
"ПоÑледовательный целочиÑленный Ñчетчик.\n"
-"Сравните параметров Ñчетчика."
+"Сравните параметры Ñчетчика."
#: editor/rename_dialog.cpp
msgid "Per Level counter"
@@ -10435,7 +10403,7 @@ msgstr "Переподчинить узел"
#: editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr "Ðовое меÑто (выберите нового РодителÑ):"
+msgstr "Ðовое меÑто (выберите нового родителÑ):"
#: editor/reparent_dialog.cpp
msgid "Keep Global Transform"
@@ -10503,11 +10471,11 @@ msgstr "Эта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть произведена
#: editor/scene_tree_dock.cpp
msgid "Move Node In Parent"
-msgstr "Перемещение узла в РодительÑкий"
+msgstr "Перемещение узла в родительÑкий"
#: editor/scene_tree_dock.cpp
msgid "Move Nodes In Parent"
-msgstr "Перемещение узлов в РодительÑкий"
+msgstr "Перемещение узлов в родительÑкий"
#: editor/scene_tree_dock.cpp
msgid "Duplicate Node(s)"
@@ -10557,7 +10525,7 @@ msgstr "Эта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть Ñделана на Ñ€Ð
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
-msgstr "Сохранить новую Сцену как..."
+msgstr "Сохранить новую Ñцену как..."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -10742,7 +10710,7 @@ msgstr "Группа кнопок"
#: editor/scene_tree_editor.cpp
msgid "(Connecting From)"
-msgstr "(Подключение от)"
+msgstr "(ИÑточник)"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
@@ -10865,9 +10833,8 @@ msgid "Error loading script from %s"
msgstr "Ошибка при загрузке Ñкрипта из %s"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Overrides"
-msgstr "ПерезапиÑать"
+msgstr "Переопределить"
#: editor/script_create_dialog.cpp
msgid "N/A"
@@ -10875,7 +10842,7 @@ msgstr "Ð/Д"
#: editor/script_create_dialog.cpp
msgid "Open Script / Choose Location"
-msgstr "Открыть Скрипт / Выбрать МеÑто"
+msgstr "Открыть Ñкрипт / Выбрать меÑто"
#: editor/script_create_dialog.cpp
msgid "Open Script"
@@ -10914,9 +10881,8 @@ msgid "Will load an existing script file."
msgstr "Будет загружен ÑущеÑтвующий Ñкрипт."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "Разрез уже ÑущеÑтвует."
+msgstr "Файл Ñкрипта уже ÑущеÑтвует."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -10972,7 +10938,7 @@ msgstr "ИÑходный код C++:"
#: editor/script_editor_debugger.cpp
msgid "Stack Trace"
-msgstr "ТраÑÑировка Стека"
+msgstr "ТраÑÑировка Ñтека"
#: editor/script_editor_debugger.cpp
msgid "Errors"
@@ -11081,15 +11047,15 @@ msgstr "ЭкÑпорт измерений в CSV"
#: editor/settings_config_dialog.cpp
msgid "Erase Shortcut"
-msgstr "Удалить ПривÑзанную Кнопку"
+msgstr "Удалить горÑчую клавишу"
#: editor/settings_config_dialog.cpp
msgid "Restore Shortcut"
-msgstr "ВоÑÑтановить ПривÑзанную Кнопку"
+msgstr "ВоÑÑтановить горÑчую клавишу"
#: editor/settings_config_dialog.cpp
msgid "Change Shortcut"
-msgstr "Изменить ПривÑзанную Кнопку"
+msgstr "Изменить горÑчую клавишу"
#: editor/settings_config_dialog.cpp
msgid "Editor Settings"
@@ -11097,7 +11063,7 @@ msgstr "ÐаÑтройки редактора"
#: editor/settings_config_dialog.cpp
msgid "Shortcuts"
-msgstr "ПривÑзанные кнопки"
+msgstr "ГорÑчие клавиши"
#: editor/settings_config_dialog.cpp
msgid "Binding"
@@ -11384,14 +11350,13 @@ msgstr "Заполнить выбранное"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
-msgstr "GridMap Параметры"
+msgstr "Параметры GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Pick Distance:"
msgstr "РаÑÑтоÑние выбора:"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Filter meshes"
msgstr "Фильтр полиÑеток"
@@ -11718,18 +11683,15 @@ msgid "Paste VisualScript Nodes"
msgstr "Ð’Ñтавить узлы VisualScript"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Can't create function with a function node."
-msgstr "Ðе удаётÑÑ Ñкопировать узел функцию."
+msgstr "Ðе удаётÑÑ Ñоздать функцию Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¾Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼ узлом."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Can't create function of nodes from nodes of multiple functions."
msgstr ""
-"Ðевозможно Ñоздать функцию из узлов, принадлежащим неÑкольким функциÑм."
+"Ðевозможно Ñоздать функцию узлов из узлов принадлежащим неÑкольким функциÑм."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Select at least one node with sequence port."
msgstr "Выберите по крайней мере один узел Ñ Ð¿Ð¾Ñледовательным портом."
@@ -11764,7 +11726,7 @@ msgstr "Редактирование Ñигнала:"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Make Tool:"
-msgstr "Сделать инÑтрумент:"
+msgstr "Сделать инÑтрументом:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Members:"
@@ -12051,18 +12013,16 @@ msgid "Using default boot splash image."
msgstr "ИÑпользовать Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ñтавки по умолчанию."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package short name."
-msgstr "ÐедопуÑтимое Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°:"
+msgstr "ÐедопуÑтимое короткое Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°."
#: platform/uwp/export/export.cpp
msgid "Invalid package unique name."
msgstr "Ðеверное уникальное Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package publisher display name."
-msgstr "Ðеверное уникальное Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°."
+msgstr "Ðеверное Ð¸Ð¼Ñ Ð¸Ð·Ð´Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð°ÐºÐµÑ‚Ð°."
#: platform/uwp/export/export.cpp
msgid "Invalid product GUID."
@@ -12105,13 +12065,12 @@ msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Ðеверные размеры заÑтавки (должны быть 620x300)."
#: scene/2d/animated_sprite.cpp
-#, fuzzy
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite to display frames."
msgstr ""
-"Чтобы AnimatedSprite отображал кадры, пожалуйÑта уÑтановите или Ñоздайте "
-"реÑÑƒÑ€Ñ SpriteFrames в параметре 'Frames'."
+"Чтобы AnimatedSprite отображал кадры, реÑÑƒÑ€Ñ SpriteFrames должен быть Ñоздан "
+"или задан в ÑвойÑтве «Frames»."
#: scene/2d/canvas_modulate.cpp
msgid ""
@@ -12175,12 +12134,11 @@ msgstr ""
"включенной функцией \"Particles Animation\"."
#: scene/2d/light_2d.cpp
-#, fuzzy
msgid ""
"A texture with the shape of the light must be supplied to the \"Texture\" "
"property."
msgstr ""
-"ТекÑтуры Ñ Ñ„Ð¾Ñ€Ð¼Ð¾Ð¹ Ñвета должны быть предоÑтавлены параметру \"texture\"."
+"ТекÑтуры Ñ Ñ„Ð¾Ñ€Ð¼Ð¾Ð¹ Ñвета должны быть предоÑтавлены параметру \"Texture\"."
#: scene/2d/light_occluder_2d.cpp
msgid ""
@@ -12283,25 +12241,22 @@ msgstr ""
"Skeleton2D и уÑтановите её."
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid ""
"TileMap with Use Parent on needs a parent CollisionObject2D to give shapes "
"to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, "
"KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D Ñлужит только Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ñтолкновений фигурам типа "
-"CollisionObject2D. ПожалуйÑта иÑпользовать его только в качеÑтве дочернего "
-"Ð´Ð»Ñ Area2D, StaticBody2D, RigidBody2D, KinematicBody2D и др. чтобы придать "
-"им форму."
+"Узлу TileMap Ñ Â«Use Parent» необходим родитель CollisionObject2D. "
+"ПожалуйÑта, иÑпользуйте данный узел в качеÑтве дочернего Ð´Ð»Ñ Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D и др. чтобы придать им форму."
#: scene/2d/visibility_notifier_2d.cpp
-#, fuzzy
msgid ""
"VisibilityEnabler2D works best when used with the edited scene root directly "
"as parent."
msgstr ""
-"VisibilityEnable2D работает наилучшим образом при иÑпользовании ÐºÐ¾Ñ€Ð½Ñ "
-"редактируемой Ñцены, как прÑмого родителÑ."
+"VisibilityEnable2D работает лучше вÑего когда корень редактируемой Ñцены "
+"ÑвлÑетÑÑ ÐµÐ³Ð¾ прÑмым родителем."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRCamera must have an ARVROrigin node as its parent."
@@ -12349,7 +12304,7 @@ msgstr "ПоÑтроение полиÑетки: "
#: scene/3d/baked_lightmap.cpp
msgid "Plotting Lights:"
-msgstr "ПоÑтроение Света:"
+msgstr "ПоÑтроение Ñвета:"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
msgid "Finishing Plot"
@@ -12395,13 +12350,12 @@ msgstr ""
"Area, StaticBody, RigidBody, KinematicBody и др. чтобы придать им форму."
#: scene/3d/collision_shape.cpp
-#, fuzzy
msgid ""
"A shape must be provided for CollisionShape to function. Please create a "
"shape resource for it."
msgstr ""
-"Shape должен быть предуÑмотрен Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ CollisionShape. ПожалуйÑта, "
-"Ñоздайте shape-реÑÑƒÑ€Ñ Ð´Ð»Ñ Ñтого!"
+"Shape должен быть предоÑтавлен Ð´Ð»Ñ CollisionShape. ПожалуйÑта, Ñоздайте "
+"shape-реÑÑƒÑ€Ñ Ð´Ð»Ñ Ñтого."
#: scene/3d/collision_shape.cpp
msgid ""
@@ -12416,13 +12370,12 @@ msgid "Nothing is visible because no mesh has been assigned."
msgstr "Ðичто не видно, потому что не назначена Ñетка."
#: scene/3d/cpu_particles.cpp
-#, fuzzy
msgid ""
"CPUParticles animation requires the usage of a SpatialMaterial whose "
"Billboard Mode is set to \"Particle Billboard\"."
msgstr ""
-"ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ CPUParticles требует иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SpatialMaterial Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹ "
-"функцией \"Billboard Particles\"."
+"ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ CPUParticles требует иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SpatialMaterial, в котором "
+"Billboard Mode задано в «Particle Billboard»."
#: scene/3d/gi_probe.cpp
msgid "Plotting Meshes"
@@ -12469,13 +12422,12 @@ msgid ""
msgstr "Ðичего не видно, потому что полиÑетки не были назначены на отриÑовку."
#: scene/3d/particles.cpp
-#, fuzzy
msgid ""
"Particles animation requires the usage of a SpatialMaterial whose Billboard "
"Mode is set to \"Particle Billboard\"."
msgstr ""
-"ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ñ‡Ð°Ñтиц требует иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SpatialMaterial Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹ функцией "
-"\"Billboard Particles\"."
+"ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ñ‡Ð°Ñтиц требует иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SpatialMaterial, в котором Billboard "
+"Mode уÑтановлено в «Particle Billboard»."
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
@@ -12608,11 +12560,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Цвет: #%s\n"
+"ЛКМ: УÑтановить цвет\n"
+"ПКМ: Удалить преÑет"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Выбрать цвет Ñ Ñкрана."
+msgstr "Выберите цвет в Ñкране редактора."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12620,7 +12574,7 @@ msgstr "HSV"
#: scene/gui/color_picker.cpp
msgid "Raw"
-msgstr "Сырой"
+msgstr "Raw"
#: scene/gui/color_picker.cpp
msgid "Switch between hexadecimal and code values."
@@ -12631,16 +12585,15 @@ msgid "Add current color as a preset."
msgstr "Добавить текущий цвет как преÑет."
#: scene/gui/container.cpp
-#, fuzzy
msgid ""
"Container by itself serves no purpose unless a script configures its "
"children placement behavior.\n"
"If you don't intend to add a script, use a plain Control node instead."
msgstr ""
"Контейнер Ñам по Ñебе не имеет ÑмыÑла, пока Ñкрипт не наÑтроит режим "
-"Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ детей.\n"
-"ЕÑли вы не ÑобираетеÑÑŒ добавлÑть Ñкрипт, иÑпользуйте вмеÑто Ñтого проÑтой "
-"узел 'Control'."
+"Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ дочерних Ñлементов.\n"
+"ЕÑли не будете добавлÑть Ñкрипт, то иÑпользуйте вмеÑто Ñтого узел \"Control"
+"\"."
#: scene/gui/control.cpp
msgid ""
@@ -12660,15 +12613,14 @@ msgid "Please Confirm..."
msgstr "Подтверждение..."
#: scene/gui/popup.cpp
-#, fuzzy
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
"functions. Making them visible for editing is fine, but they will hide upon "
"running."
msgstr ""
-"ПоÑле запуÑка вÑплывающие окна по умолчанию Ñкрыты, Ð´Ð»Ñ Ð¸Ñ… Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ "
-"иÑпользуйте функцию popup() или любую из popup*(). Делать их видимыми Ð´Ð»Ñ "
-"Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ - нормально, но они будут Ñкрыты при запуÑке."
+"Ð’Ñплывающие окна по умолчанию Ñкрыты, Ð´Ð»Ñ Ð¸Ñ… Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ñпользуйте одну из "
+"функций popup() или popup*(). Их можно делать видимыми при редактировании, "
+"но они будут Ñкрыты при запуÑке."
#: scene/gui/range.cpp
msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
@@ -12739,6 +12691,15 @@ msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть назначены только Ð
msgid "Constants cannot be modified."
msgstr "КонÑтанты не могут быть изменены."
+#~ msgid "enum "
+#~ msgstr "перечиÑление "
+
+#~ msgid "Brief Description"
+#~ msgstr "Краткое опиÑание"
+
+#~ msgid "Class Description"
+#~ msgstr "ОпиÑание клаÑÑа"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "ЭкÑпорт проекта не удалÑÑ, код %d."
diff --git a/editor/translations/si.po b/editor/translations/si.po
index 3876763252..4b1ddaed39 100644
--- a/editor/translations/si.po
+++ b/editor/translations/si.po
@@ -1907,46 +1907,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1954,6 +1954,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index 9760450e61..d399f70f14 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -1963,14 +1963,34 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "Popis:"
#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+
+#: editor/editor_help.cpp
msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "NaÄítaÅ¥ predvolené"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr ""
@@ -1985,34 +2005,19 @@ msgid "Enumerations"
msgstr "Popis:"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr ""
-
-#: editor/editor_help.cpp
#, fuzzy
msgid "Constants"
msgstr "Konštanty:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
+msgid "Property Descriptions"
msgstr "Popis:"
#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr ""
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-
-#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Popis:"
+msgid "(value)"
+msgstr "Hodnota:"
#: editor/editor_help.cpp
msgid ""
@@ -12492,6 +12497,14 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Popis:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Popis:"
+
#~ msgid "Shift+"
#~ msgstr "Shift+"
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index fd3d3ed35d..9032c7ed35 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -2033,14 +2033,37 @@ msgstr "Podedovano od:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Kratek Opis:"
+msgid "Description"
+msgstr "Opis:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Spletne Vaje:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Trenutno ni vaj za ta razred, lahko ga [color=$color][url=$url]prispevate[/"
+"url][/color] ali [color=$color][url=$url2]zahtevate enega[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Lastnosti"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Prevzeto"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metode"
@@ -2054,36 +2077,18 @@ msgid "Enumerations"
msgstr "OÅ¡tevilÄenja"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "oštevil "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstante"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "Opis"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "Spletne Vaje:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Trenutno ni vaj za ta razred, lahko ga [color=$color][url=$url]prispevate[/"
-"url][/color] ali [color=$color][url=$url2]zahtevate enega[/url][/color]."
+msgid "Property Descriptions"
+msgstr "Opis lastnosti:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Opis lastnosti:"
+msgid "(value)"
+msgstr "Novo ime:"
#: editor/editor_help.cpp
msgid ""
@@ -12873,6 +12878,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstante ni možno spreminjati."
+#~ msgid "enum "
+#~ msgstr "oštevil "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Kratek Opis:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Opis"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Izvoz projekta ni uspelo s kodno napako %d."
diff --git a/editor/translations/sq.po b/editor/translations/sq.po
index 398a9072b8..0066dd3b26 100644
--- a/editor/translations/sq.po
+++ b/editor/translations/sq.po
@@ -1967,14 +1967,39 @@ msgstr "E trashëguar nga:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Përshkrim i Shkurtër:"
+msgid "Description"
+msgstr "Përshkrimi:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Tutorialet Online:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Nuk ka për momentin tutoriale për këtë klas, ti mund të [color=$color][url="
+"$url]contribute one[/url][/color] ose [color=$color][url=$url2]request one[/"
+"url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Vetitë"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Mbishkruaj"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "E Parazgjedhur"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metodat"
@@ -1987,35 +2012,17 @@ msgid "Enumerations"
msgstr "Enumeracionet"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr ""
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstantet"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Përshkrimi i Klasës"
+msgid "Property Descriptions"
+msgstr "Përshkrimi i Vetive"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Online Tutorials"
-msgstr "Tutorialet Online:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Nuk ka për momentin tutoriale për këtë klas, ti mund të [color=$color][url="
-"$url]contribute one[/url][/color] ose [color=$color][url=$url2]request one[/"
-"url][/color]."
-
-#: editor/editor_help.cpp
-msgid "Property Descriptions"
-msgstr "Përshkrimi i Vetive"
+msgid "(value)"
+msgstr "Vlerë e Re:"
#: editor/editor_help.cpp
msgid ""
@@ -12426,6 +12433,13 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Përshkrim i Shkurtër:"
+
+#~ msgid "Class Description"
+#~ msgstr "Përshkrimi i Klasës"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Eksportimi i projektit dështoi me kodin e gabimit %d."
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
index 3d0341383f..8fdbaa81a2 100644
--- a/editor/translations/sr_Cyrl.po
+++ b/editor/translations/sr_Cyrl.po
@@ -2037,14 +2037,38 @@ msgstr "ÐаÑлеђено од:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Кратак опиÑ:"
+msgid "Description"
+msgstr "ОпиÑ:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Онлајн документација"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Тренутно нема опиÑа ове методе. Молимо помозите нама тако што ћете [color="
+"$color][url=$url]напиÑати једну[/url][/color]!"
#: editor/editor_help.cpp
msgid "Properties"
msgstr "ОÑобине"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Уобичајено"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Методе"
@@ -2058,37 +2082,18 @@ msgid "Enumerations"
msgstr "Енумерације"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "КонÑтанте"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "ОпиÑ"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "Онлајн документација"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Тренутно нема опиÑа ове методе. Молимо помозите нама тако што ћете [color="
-"$color][url=$url]напиÑати једну[/url][/color]!"
+msgid "Property Descriptions"
+msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:"
+msgid "(value)"
+msgstr "Ðово име:"
#: editor/editor_help.cpp
msgid ""
@@ -12979,6 +12984,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Кратак опиÑ:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "ОпиÑ"
+
#~ msgid "Password:"
#~ msgstr "Лозинка:"
diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po
index b9aa895863..291e70410b 100644
--- a/editor/translations/sr_Latn.po
+++ b/editor/translations/sr_Latn.po
@@ -1919,46 +1919,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1966,6 +1966,11 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "Vrednost:"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
index 0a949e6f4e..6212071472 100644
--- a/editor/translations/sv.po
+++ b/editor/translations/sv.po
@@ -2023,14 +2023,38 @@ msgstr "Ärvd av:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Kort Beskrivning:"
+msgid "Description"
+msgstr "Beskrivning:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Dokumentation Online"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request 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]!"
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Egenskaper"
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Standard"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metoder"
@@ -2044,37 +2068,18 @@ msgid "Enumerations"
msgstr "Uppräkningar"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Konstanter"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "Beskrivning"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "Dokumentation Online"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request 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]!"
+msgid "Property Descriptions"
+msgstr "Egenskapsbeskrivning:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Egenskapsbeskrivning:"
+msgid "(value)"
+msgstr "Värde"
#: editor/editor_help.cpp
msgid ""
@@ -12820,6 +12825,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "enum "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Kort Beskrivning:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "Beskrivning"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Projekt exporten misslyckades med följande felmeddelande %d."
diff --git a/editor/translations/ta.po b/editor/translations/ta.po
index 7e85c8a469..94bbe2234a 100644
--- a/editor/translations/ta.po
+++ b/editor/translations/ta.po
@@ -1909,46 +1909,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1956,6 +1956,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/te.po b/editor/translations/te.po
index 3943a5f713..428319aa29 100644
--- a/editor/translations/te.po
+++ b/editor/translations/te.po
@@ -1886,46 +1886,46 @@ msgid "Inherited by:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Brief Description"
+msgid "Description"
msgstr ""
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-msgid "Theme Properties"
+msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
+msgid "Theme Properties"
msgstr ""
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1933,6 +1933,10 @@ msgid "Property Descriptions"
msgstr ""
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
diff --git a/editor/translations/th.po b/editor/translations/th.po
index f027ef1ccb..52077132ee 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -2035,14 +2035,38 @@ msgstr "สืบทอดโดย:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "รายละเอียด:"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "สอนใช้งานออนไลน์:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"คลาสนี้ยังไม่มีà¸à¸²à¸£à¸ªà¸­à¸™à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ ท่านสามารถ[color=$color][url=$url]ช่วยเขียน[/url][/"
+"color] หรือ [color=$color][url=$url2]ขอให้จัดทำ[/url][/color]"
+
+#: editor/editor_help.cpp
msgid "Properties"
msgstr "คุณสมบัติ"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "à¸à¸³à¸«à¸™à¸”เฉพาะ..."
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "ค่าเริ่มต้น"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "รายชื่อเมท็อด"
@@ -2056,36 +2080,18 @@ msgid "Enumerations"
msgstr "ค่าคงที่"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "à¸à¸¥à¸¸à¹ˆà¸¡à¸„่าคงที่ "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "ค่าคงที่"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "รายละเอียด"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "สอนใช้งานออนไลน์:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"คลาสนี้ยังไม่มีà¸à¸²à¸£à¸ªà¸­à¸™à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ ท่านสามารถ[color=$color][url=$url]ช่วยเขียน[/url][/"
-"color] หรือ [color=$color][url=$url2]ขอให้จัดทำ[/url][/color]"
+msgid "Property Descriptions"
+msgstr "รายละเอียดตัวà¹à¸›à¸£:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "รายละเอียดตัวà¹à¸›à¸£:"
+msgid "(value)"
+msgstr "ค่า"
#: editor/editor_help.cpp
msgid ""
@@ -12979,6 +12985,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "à¸à¸¥à¸¸à¹ˆà¸¡à¸„่าคงที่ "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "รายละเอียด:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "รายละเอียด"
+
#~ msgid "Password:"
#~ msgstr "รหัสผ่าน:"
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index e43c4e7211..9451624a4a 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -1974,14 +1974,39 @@ msgid "Inherited by:"
msgstr "Şundan miras alındı:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "Kısa Açıklama"
+#, fuzzy
+msgid "Description"
+msgstr "Açıklama:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Çevrimiçi Rehberler"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"Bu metot için henüz bir rehber yok. Siz de\n"
+"[color=$color][url=$url]hazırlayabilir[/url][/color] ya da \n"
+"[color=$color][url=$url2]öneride bulunabilirsiniz[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Özellikler"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Üzerine Yaz"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Varsayılan"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Metotlar"
@@ -1994,36 +2019,19 @@ msgid "Enumerations"
msgstr "Numaralandırmalar"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "enum… "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "Sabitler"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Sınıf Açıklaması"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Çevrimiçi Rehberler"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"Bu metot için henüz bir rehber yok. Siz de\n"
-"[color=$color][url=$url]hazırlayabilir[/url][/color] ya da \n"
-"[color=$color][url=$url2]öneride bulunabilirsiniz[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "Özellik Açıklamaları"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "DeÄŸer"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12732,6 +12740,15 @@ msgstr "Değişkenler yalnızca tepe işlevinde atanabilir."
msgid "Constants cannot be modified."
msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez."
+#~ msgid "enum "
+#~ msgstr "enum… "
+
+#~ msgid "Brief Description"
+#~ msgstr "Kısa Açıklama"
+
+#~ msgid "Class Description"
+#~ msgstr "Sınıf Açıklaması"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Proje dışa aktarımı %d hata koduyla başarısız."
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
index 227e219c54..779506a0e9 100644
--- a/editor/translations/uk.po
+++ b/editor/translations/uk.po
@@ -17,8 +17,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Ukrainian (Godot Engine)\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-01-03 21:21+0000\n"
-"Last-Translator: Tymofij Lytvynenko <till.svit@gmail.com>\n"
+"PO-Revision-Date: 2020-01-13 13:36+0000\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot/uk/>\n"
"Language: uk\n"
@@ -27,7 +27,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 3.10\n"
+"X-Generator: Weblate 3.10.1\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1207,9 +1207,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби відкрити файл пакунка — дані не у форматі zip."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "Вже Ñ–Ñнує"
+msgstr "%s (вже Ñ–Ñнує)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1220,9 +1219,8 @@ msgid "The following files failed extraction from package:"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð¾Ð±ÑƒÑ‚Ð¸ такі файли з пакунка:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "%d більше файлів"
+msgstr "І ще %s файлів."
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1234,9 +1232,8 @@ msgid "Success!"
msgstr "УÑпіх!"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "ЗміÑÑ‚:"
+msgstr "ВміÑÑ‚ пакунка:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1376,9 +1373,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "ÐеприпуÑтимий файл, це не ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾-шини."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°!"
+msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1954,14 +1950,39 @@ msgid "Inherited by:"
msgstr "УÑпадковано:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "СтиÑлий опиÑ"
+#, fuzzy
+msgid "Description"
+msgstr "ОпиÑ:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Підручники в інтернеті"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"ÐаÑтанов щодо цього клаÑу ще немає. Ви можете [color=$color][url="
+"$url]Ñтворити Ñ—Ñ…[/url][/color] або [color=$color][url=$url2]надіÑлати запит "
+"щодо їхнього ÑтвореннÑ[/url][/color]."
#: editor/editor_help.cpp
msgid "Properties"
msgstr "ВлаÑтивоÑті"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "ПеревизначеннÑ"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Типовий"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Методи"
@@ -1974,36 +1995,19 @@ msgid "Enumerations"
msgstr "Перелічуваний"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "перелічуваний "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "КонÑтанти"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "Підручники в інтернеті"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"ÐаÑтанов щодо цього клаÑу ще немає. Ви можете [color=$color][url="
-"$url]Ñтворити Ñ—Ñ…[/url][/color] або [color=$color][url=$url2]надіÑлати запит "
-"щодо їхнього ÑтвореннÑ[/url][/color]."
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "ОпиÑи влаÑтивоÑтей"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "ЗначеннÑ"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -5737,20 +5741,18 @@ msgstr "МаÑка випромінюваннÑ"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "СтиÑÐºÐ°Ð½Ð½Ñ (пікÑелі): "
+msgstr "Суцільні пікÑелі"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "Межеві пікÑелі"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Каталоги та файли:"
+msgstr "ПікÑелі на ÑпрÑмованій межі"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -10843,9 +10845,8 @@ msgid "Will load an existing script file."
msgstr "Завантажити наÑвний файл Ñкрипту."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "Поділ вже Ñ–Ñнує."
+msgstr "Файл Ñкрипту вже Ñ–Ñнує."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12536,11 +12537,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Колір: #%s\n"
+"Ліва кнопка: вÑтановити колір\n"
+"Права кнопка: вилучити взірець"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Вибрати колір з екрана."
+msgstr "Вибрати колір з вікна редактора."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12663,6 +12666,15 @@ msgstr "Змінні величини можна пов'Ñзувати лише
msgid "Constants cannot be modified."
msgstr "Сталі не можна змінювати."
+#~ msgid "enum "
+#~ msgstr "перелічуваний "
+
+#~ msgid "Brief Description"
+#~ msgstr "СтиÑлий опиÑ"
+
+#~ msgid "Class Description"
+#~ msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати проєкт, код помилки — %d."
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index e3ebee0a76..73cfbb3650 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -1925,48 +1925,47 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
+msgid "Description"
msgstr "سب سکریپشن بنائیں"
#: editor/editor_help.cpp
-msgid "Properties"
+msgid "Online Tutorials"
msgstr ""
#: editor/editor_help.cpp
-msgid "Methods"
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Theme Properties"
-msgstr ".تمام کا انتخاب"
+msgid "Properties"
+msgstr ""
#: editor/editor_help.cpp
-msgid "Enumerations"
+msgid "override:"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
+msgid "default:"
msgstr ""
#: editor/editor_help.cpp
-msgid "Constants"
+msgid "Methods"
msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "سب سکریپشن بنائیں"
+msgid "Theme Properties"
+msgstr ".تمام کا انتخاب"
#: editor/editor_help.cpp
-msgid "Online Tutorials"
+msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
@@ -1975,6 +1974,10 @@ msgid "Property Descriptions"
msgstr "سب سکریپشن بنائیں"
#: editor/editor_help.cpp
+msgid "(value)"
+msgstr ""
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12321,6 +12324,10 @@ msgid "Constants cannot be modified."
msgstr ""
#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "سب سکریپشن بنائیں"
+
+#, fuzzy
#~ msgid "Class Description:"
#~ msgstr "سب سکریپشن بنائیں"
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
index 6c2bcb20e4..6024fc9d8d 100644
--- a/editor/translations/vi.po
+++ b/editor/translations/vi.po
@@ -1947,14 +1947,36 @@ msgstr "ÄÆ°á»£c thừa kế bởi:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "Mô tả ngắn gá»n:"
+msgid "Description"
+msgstr "Mô tả:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "Hướng dẫn trực tuyến:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
#: editor/editor_help.cpp
msgid "Properties"
msgstr "Thuộc tính"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "Ghi đè"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "Mặc định"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "Hàm"
@@ -1967,33 +1989,18 @@ msgid "Enumerations"
msgstr ""
#: editor/editor_help.cpp
-msgid "enum "
-msgstr ""
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr ""
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "Mô tả lớp"
-
-#: editor/editor_help.cpp
#, fuzzy
-msgid "Online Tutorials"
-msgstr "Hướng dẫn trực tuyến:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
+msgid "Property Descriptions"
+msgstr "Mô tả ngắn gá»n:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Mô tả ngắn gá»n:"
+msgid "(value)"
+msgstr "Giá trị:"
#: editor/editor_help.cpp
msgid ""
@@ -12475,6 +12482,13 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Không thể chỉnh sửa hằng số."
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "Mô tả ngắn gá»n:"
+
+#~ msgid "Class Description"
+#~ msgstr "Mô tả lớp"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "Xuất dự án thất bại với mã lỗi %d."
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index a1edaeec7e..42e78e233e 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -63,7 +63,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Chinese (Simplified) (Godot Engine)\n"
"POT-Creation-Date: 2018-01-20 12:15+0200\n"
-"PO-Revision-Date: 2020-01-12 13:26+0000\n"
+"PO-Revision-Date: 2020-01-13 13:36+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"
@@ -1229,9 +1229,8 @@ msgid "Error opening package file, not in ZIP format."
msgstr "打开压缩文件时出错,éžzipæ ¼å¼ã€‚"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (Already Exists)"
-msgstr "å·²ç»å­˜åœ¨"
+msgstr "%s(已存在)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1242,9 +1241,8 @@ msgid "The following files failed extraction from package:"
msgstr "以下文件无法从包中æå–:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "And %s more files."
-msgstr "其它 %d 个文件"
+msgstr "以åŠå…¶å®ƒ%s个文件。"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1256,9 +1254,8 @@ msgid "Success!"
msgstr "æˆåŠŸï¼"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Package Contents:"
-msgstr "内容:"
+msgstr "包内容:"
#: editor/editor_asset_installer.cpp editor/editor_node.cpp
msgid "Install"
@@ -1398,9 +1395,8 @@ msgid "Invalid file, not an audio bus layout."
msgstr "æ— æ•ˆæ–‡ä»¶ï¼Œä¸æ˜¯éŸ³é¢‘总线布局。"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Error saving file: %s"
-msgstr "ä¿å­˜æ–‡ä»¶æ—¶å‡ºé”™ï¼"
+msgstr "ä¿å­˜æ–‡ä»¶æ—¶å‡ºé”™ï¼š%s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -1965,14 +1961,38 @@ msgid "Inherited by:"
msgstr "派生:"
#: editor/editor_help.cpp
-msgid "Brief Description"
-msgstr "简介"
+#, fuzzy
+msgid "Description"
+msgstr "æè¿°:"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "在线教程"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"当剿²¡æœ‰æ­¤ç±»åž‹çš„æ•™ç¨‹ï¼Œä½ å¯ä»¥[color=$color][url=$url]贡献一个[/url][/color]或"
+"[color=$color][url=$url2]请求一个[/url][/color]。"
#: editor/editor_help.cpp
msgid "Properties"
msgstr "属性"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "é‡å†™"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "默认"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "方法"
@@ -1985,35 +2005,19 @@ msgid "Enumerations"
msgstr "枚举"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "枚举 "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "常é‡"
#: editor/editor_help.cpp
-msgid "Class Description"
-msgstr "类说明"
-
-#: editor/editor_help.cpp
-msgid "Online Tutorials"
-msgstr "在线教程"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"当剿²¡æœ‰æ­¤ç±»åž‹çš„æ•™ç¨‹ï¼Œä½ å¯ä»¥[color=$color][url=$url]贡献一个[/url][/color]或"
-"[color=$color][url=$url2]请求一个[/url][/color]。"
-
-#: editor/editor_help.cpp
msgid "Property Descriptions"
msgstr "属性说明"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "(value)"
+msgstr "值"
+
+#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -5657,20 +5661,18 @@ msgstr "å‘å°„é®ç½©"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Solid Pixels"
-msgstr "收缩(åƒç´ ï¼‰ï¼š "
+msgstr "实体åƒç´ "
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "边界åƒç´ "
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "目录与文件:"
+msgstr "有å‘边界åƒç´ "
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -5689,12 +5691,12 @@ msgstr "CPUç²’å­"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Mesh"
-msgstr "从网格( Mesh)创建å‘射器(Emission)"
+msgstr "从Mesh创建å‘射点"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Node"
-msgstr "从节点创建å‘射器(Emission)"
+msgstr "从Node创建å‘射点"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 0"
@@ -10661,9 +10663,8 @@ msgid "Will load an existing script file."
msgstr "将加载现有的脚本文件。"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script file already exists."
-msgstr "拆分已存在。"
+msgstr "脚本文件已存在。"
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12257,11 +12258,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"颜色:#%s\n"
+"鼠标左键:设置颜色\n"
+"é¼ æ ‡å³é”®ï¼šåˆ é™¤é¢„设"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "从å±å¹•中选择一ç§é¢œè‰²ã€‚"
+msgstr "从编辑器窗å£ä¸­é€‰æ‹©ä¸€ç§é¢œè‰²ã€‚"
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12375,6 +12378,15 @@ msgstr "å˜é‡åªèƒ½åœ¨é¡¶ç‚¹å‡½æ•°ä¸­æŒ‡å®šã€‚"
msgid "Constants cannot be modified."
msgstr "ä¸å…许修改常é‡ã€‚"
+#~ msgid "enum "
+#~ msgstr "枚举 "
+
+#~ msgid "Brief Description"
+#~ msgstr "简介"
+
+#~ msgid "Class Description"
+#~ msgstr "类说明"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "é¡¹ç›®å¯¼å‡ºå¤±è´¥ï¼Œé”™è¯¯ä»£ç  %d。"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index d52249df61..c8f82b6421 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -2060,14 +2060,35 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "簡述:"
+msgid "Description"
+msgstr "æè¿°ï¼š"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "關閉場景"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
#: editor/editor_help.cpp
msgid "Properties"
msgstr ""
#: editor/editor_help.cpp
+msgid "override:"
+msgstr ""
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "é è¨­"
+
+#: editor/editor_help.cpp
#, fuzzy
msgid "Methods"
msgstr "鏿“‡æ¨¡å¼"
@@ -2083,37 +2104,20 @@ msgid "Enumerations"
msgstr "翻譯:"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr ""
-
-#: editor/editor_help.cpp
#, fuzzy
msgid "Constants"
msgstr "常數"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "æè¿°ï¼š"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "關閉場景"
+msgid "Property Descriptions"
+msgstr "簡述:"
#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
+msgid "(value)"
msgstr ""
#: editor/editor_help.cpp
-#, fuzzy
-msgid "Property Descriptions"
-msgstr "簡述:"
-
-#: editor/editor_help.cpp
msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
@@ -12897,6 +12901,14 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "簡述:"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "æè¿°ï¼š"
+
#~ msgid "Password:"
#~ msgstr "密碼:"
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index 1ca1a64015..61fcbd3f4c 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -2060,14 +2060,38 @@ msgstr "繼承:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Brief Description"
-msgstr "ç°¡è¦èªªæ˜Žï¼š"
+msgid "Description"
+msgstr "æè¿°:"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "Online Tutorials"
+msgstr "線上教學:"
+
+#: editor/editor_help.cpp
+msgid ""
+"There are currently no tutorials for this class, you can [color=$color][url="
+"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
+"url][/color]."
+msgstr ""
+"ç›®å‰æ²’有這個 class 的教學,你å¯ä»¥[color=$color][url=$url]è²¢ç»ä¸€å€‹[/url][/"
+"color]或[color=$color][url=$url2]è¦æ±‚一個[/url][/color]。"
#: editor/editor_help.cpp
msgid "Properties"
msgstr "性質"
#: editor/editor_help.cpp
+#, fuzzy
+msgid "override:"
+msgstr "覆蓋"
+
+#: editor/editor_help.cpp
+#, fuzzy
+msgid "default:"
+msgstr "é è¨­"
+
+#: editor/editor_help.cpp
msgid "Methods"
msgstr "方法"
@@ -2081,36 +2105,18 @@ msgid "Enumerations"
msgstr "枚舉"
#: editor/editor_help.cpp
-msgid "enum "
-msgstr "枚舉 "
-
-#: editor/editor_help.cpp
msgid "Constants"
msgstr "定數"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Class Description"
-msgstr "æè¿°:"
-
-#: editor/editor_help.cpp
-#, fuzzy
-msgid "Online Tutorials"
-msgstr "線上教學:"
-
-#: editor/editor_help.cpp
-msgid ""
-"There are currently no tutorials for this class, you can [color=$color][url="
-"$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/"
-"url][/color]."
-msgstr ""
-"ç›®å‰æ²’有這個 class 的教學,你å¯ä»¥[color=$color][url=$url]è²¢ç»ä¸€å€‹[/url][/"
-"color]或[color=$color][url=$url2]è¦æ±‚一個[/url][/color]。"
+msgid "Property Descriptions"
+msgstr "Property 說明:"
#: editor/editor_help.cpp
#, fuzzy
-msgid "Property Descriptions"
-msgstr "Property 說明:"
+msgid "(value)"
+msgstr "數值"
#: editor/editor_help.cpp
msgid ""
@@ -12900,6 +12906,17 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "enum "
+#~ msgstr "枚舉 "
+
+#, fuzzy
+#~ msgid "Brief Description"
+#~ msgstr "ç°¡è¦èªªæ˜Žï¼š"
+
+#, fuzzy
+#~ msgid "Class Description"
+#~ msgstr "æè¿°:"
+
#~ msgid "Project export failed with error code %d."
#~ msgstr "專案輸出失敗,錯誤代碼是 %d。"
diff --git a/main/main.cpp b/main/main.cpp
index 5cfab3dc4a..0ff392978a 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -292,7 +292,7 @@ void Main::print_help(const char *p_binary) {
OS::get_singleton()->print(" --export-pack <preset> <path> Same as --export, but only export the game pack for the given preset. The <path> extension determines whether it will be in PCK or ZIP format.\n");
OS::get_singleton()->print(" --doctool <path> Dump the engine API reference to the given <path> in XML format, merging if existing files are found.\n");
OS::get_singleton()->print(" --no-docbase Disallow dumping the base types (used with --doctool).\n");
- OS::get_singleton()->print(" --build-solutions Build the scripting solutions (e.g. for C# projects).\n");
+ OS::get_singleton()->print(" --build-solutions Build the scripting solutions (e.g. for C# projects). Implies --editor and requires a valid project to edit.\n");
#ifdef DEBUG_METHODS_ENABLED
OS::get_singleton()->print(" --gdnative-generate-json-api Generate JSON dump of the Godot API for GDNative bindings.\n");
#endif
@@ -1035,7 +1035,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
// window compositor ("--enable-vsync-via-compositor" or
// "--disable-vsync-via-compositor") was present then it overrides the
// project setting.
- video_mode.vsync_via_compositor = GLOBAL_DEF("display/window/vsync/vsync_via_compositor", true);
+ video_mode.vsync_via_compositor = GLOBAL_DEF("display/window/vsync/vsync_via_compositor", false);
}
OS::get_singleton()->_vsync_via_compositor = video_mode.vsync_via_compositor;
@@ -2112,8 +2112,12 @@ bool Main::iteration() {
#ifdef TOOLS_ENABLED
if (auto_build_solutions) {
auto_build_solutions = false;
+ // Only relevant when running the editor.
+ if (!editor) {
+ ERR_FAIL_V_MSG(true, "Command line option --build-solutions was passed, but no project is being edited. Aborting.");
+ }
if (!EditorNode::get_singleton()->call_build()) {
- ERR_FAIL_V(true);
+ ERR_FAIL_V_MSG(true, "Command line option --build-solutions was passed, but the build callback failed. Aborting.");
}
}
#endif
@@ -2165,6 +2169,9 @@ void Main::cleanup() {
ScriptServer::finish_languages();
+ // Sync pending commands that may have been queued from a different thread during ScriptServer finalization
+ VisualServer::get_singleton()->sync();
+
#ifdef TOOLS_ENABLED
EditorNode::unregister_editor_types();
#endif
diff --git a/modules/assimp/import_utils.h b/modules/assimp/import_utils.h
index f4505249db..c522b01727 100644
--- a/modules/assimp/import_utils.h
+++ b/modules/assimp/import_utils.h
@@ -355,11 +355,13 @@ public:
print_verbose("Open Asset Import: Loading embedded texture " + filename);
if (tex->mHeight == 0) {
if (tex->CheckFormat("png")) {
+ ERR_FAIL_COND_V(Image::_png_mem_loader_func == NULL, Ref<Image>());
Ref<Image> img = Image::_png_mem_loader_func((uint8_t *)tex->pcData, tex->mWidth);
ERR_FAIL_COND_V(img.is_null(), Ref<Image>());
state.path_to_image_cache.insert(p_path, img);
return img;
} else if (tex->CheckFormat("jpg")) {
+ ERR_FAIL_COND_V(Image::_jpg_mem_loader_func == NULL, Ref<Image>());
Ref<Image> img = Image::_jpg_mem_loader_func((uint8_t *)tex->pcData, tex->mWidth);
ERR_FAIL_COND_V(img.is_null(), Ref<Image>());
state.path_to_image_cache.insert(p_path, img);
diff --git a/modules/enet/networked_multiplayer_enet.cpp b/modules/enet/networked_multiplayer_enet.cpp
index 61fc7688c5..21dd758391 100644
--- a/modules/enet/networked_multiplayer_enet.cpp
+++ b/modules/enet/networked_multiplayer_enet.cpp
@@ -479,23 +479,23 @@ void NetworkedMultiplayerENet::disconnect_peer(int p_peer, bool now) {
ERR_FAIL_COND(!peer_map.has(p_peer));
if (now) {
+ int *id = (int *)peer_map[p_peer]->data;
enet_peer_disconnect_now(peer_map[p_peer], 0);
// enet_peer_disconnect_now doesn't generate ENET_EVENT_TYPE_DISCONNECT,
// notify everyone else, send disconnect signal & remove from peer_map like in poll()
+ if (server_relay) {
+ for (Map<int, ENetPeer *>::Element *E = peer_map.front(); E; E = E->next()) {
- int *id = NULL;
- for (Map<int, ENetPeer *>::Element *E = peer_map.front(); E; E = E->next()) {
+ if (E->key() == p_peer) {
+ continue;
+ }
- if (E->key() == p_peer) {
- id = (int *)(E->get()->data);
- continue;
+ ENetPacket *packet = enet_packet_create(NULL, 8, ENET_PACKET_FLAG_RELIABLE);
+ encode_uint32(SYSMSG_REMOVE_PEER, &packet->data[0]);
+ encode_uint32(p_peer, &packet->data[4]);
+ enet_peer_send(E->get(), SYSCH_CONFIG, packet);
}
-
- ENetPacket *packet = enet_packet_create(NULL, 8, ENET_PACKET_FLAG_RELIABLE);
- encode_uint32(SYSMSG_REMOVE_PEER, &packet->data[0]);
- encode_uint32(p_peer, &packet->data[4]);
- enet_peer_send(E->get(), SYSCH_CONFIG, packet);
}
if (id)
diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp
index 8abf2ee7ca..a255b92257 100644
--- a/modules/gdscript/gdscript.cpp
+++ b/modules/gdscript/gdscript.cpp
@@ -320,7 +320,7 @@ ScriptInstance *GDScript::instance_create(Object *p_this) {
if (!ClassDB::is_parent_class(p_this->get_class_name(), top->native->get_name())) {
if (ScriptDebugger::get_singleton()) {
- GDScriptLanguage::get_singleton()->debug_break_parse(get_path(), 0, "Script inherits from native type '" + String(top->native->get_name()) + "', so it can't be instanced in object of type: '" + p_this->get_class() + "'");
+ GDScriptLanguage::get_singleton()->debug_break_parse(get_path(), 1, "Script inherits from native type '" + String(top->native->get_name()) + "', so it can't be instanced in object of type: '" + p_this->get_class() + "'");
}
ERR_FAIL_V_MSG(NULL, "Script inherits from native type '" + String(top->native->get_name()) + "', so it can't be instanced in object of type '" + p_this->get_class() + "'" + ".");
}
@@ -915,14 +915,43 @@ GDScript::GDScript() :
#endif
}
+void GDScript::_save_orphaned_subclasses() {
+ struct ClassRefWithName {
+ ObjectID id;
+ String fully_qualified_name;
+ };
+ Vector<ClassRefWithName> weak_subclasses;
+ // collect subclasses ObjectID and name
+ for (Map<StringName, Ref<GDScript> >::Element *E = subclasses.front(); E; E = E->next()) {
+ E->get()->_owner = NULL; //bye, you are no longer owned cause I died
+ ClassRefWithName subclass;
+ subclass.id = E->get()->get_instance_id();
+ subclass.fully_qualified_name = E->get()->fully_qualified_name;
+ weak_subclasses.push_back(subclass);
+ }
+
+ // clear subclasses to allow unused subclasses to be deleted
+ subclasses.clear();
+ // subclasses are also held by constants, clear those as well
+ constants.clear();
+
+ // keep orphan subclass only for subclasses that are still in use
+ for (int i = 0; i < weak_subclasses.size(); i++) {
+ ClassRefWithName subclass = weak_subclasses[i];
+ Object *obj = ObjectDB::get_instance(subclass.id);
+ if (!obj)
+ continue;
+ // subclass is not released
+ GDScriptLanguage::get_singleton()->add_orphan_subclass(subclass.fully_qualified_name, subclass.id);
+ }
+}
+
GDScript::~GDScript() {
for (Map<StringName, GDScriptFunction *>::Element *E = member_functions.front(); E; E = E->next()) {
memdelete(E->get());
}
- for (Map<StringName, Ref<GDScript> >::Element *E = subclasses.front(); E; E = E->next()) {
- E->get()->_owner = NULL; //bye, you are no longer owned cause I died
- }
+ _save_orphaned_subclasses();
#ifdef DEBUG_ENABLED
if (GDScriptLanguage::get_singleton()->lock) {
@@ -2176,6 +2205,22 @@ GDScriptLanguage::~GDScriptLanguage() {
singleton = NULL;
}
+void GDScriptLanguage::add_orphan_subclass(const String &p_qualified_name, const ObjectID &p_subclass) {
+ orphan_subclasses[p_qualified_name] = p_subclass;
+}
+
+Ref<GDScript> GDScriptLanguage::get_orphan_subclass(const String &p_qualified_name) {
+ Map<String, ObjectID>::Element *orphan_subclass_element = orphan_subclasses.find(p_qualified_name);
+ if (!orphan_subclass_element)
+ return Ref<GDScript>();
+ ObjectID orphan_subclass = orphan_subclass_element->get();
+ Object *obj = ObjectDB::get_instance(orphan_subclass);
+ orphan_subclasses.erase(orphan_subclass_element);
+ if (!obj)
+ return Ref<GDScript>();
+ return Ref<GDScript>(Object::cast_to<GDScript>(obj));
+}
+
/*************** RESOURCE ***************/
RES ResourceFormatLoaderGDScript::load(const String &p_path, const String &p_original_path, Error *r_error) {
diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h
index 72389cdddc..4ae52238ce 100644
--- a/modules/gdscript/gdscript.h
+++ b/modules/gdscript/gdscript.h
@@ -111,6 +111,7 @@ class GDScript : public Script {
String source;
String path;
String name;
+ String fully_qualified_name;
SelfList<GDScript> script_list;
GDScriptInstance *_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_isref, Variant::CallError &r_error);
@@ -131,6 +132,8 @@ class GDScript : public Script {
bool _update_exports();
+ void _save_orphaned_subclasses();
+
protected:
bool _get(const StringName &p_name, Variant &r_ret) const;
bool _set(const StringName &p_name, const Variant &p_value);
@@ -354,6 +357,8 @@ class GDScriptLanguage : public ScriptLanguage {
bool profiling;
uint64_t script_frame_time;
+ Map<String, ObjectID> orphan_subclasses;
+
public:
int calls;
@@ -505,6 +510,9 @@ public:
virtual bool handles_global_class_type(const String &p_type) const;
virtual String get_global_class_name(const String &p_path, String *r_base_type = NULL, String *r_icon_path = NULL) const;
+ void add_orphan_subclass(const String &p_qualified_name, const ObjectID &p_subclass);
+ Ref<GDScript> get_orphan_subclass(const String &p_qualified_name);
+
GDScriptLanguage();
~GDScriptLanguage();
};
diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp
index 7b3175d9cd..fba1b992ec 100644
--- a/modules/gdscript/gdscript_compiler.cpp
+++ b/modules/gdscript/gdscript_compiler.cpp
@@ -2123,14 +2123,21 @@ void GDScriptCompiler::_make_scripts(GDScript *p_script, const GDScriptParser::C
StringName name = p_class->subclasses[i]->name;
Ref<GDScript> subclass;
+ String fully_qualified_name = p_script->fully_qualified_name + "::" + name;
if (old_subclasses.has(name)) {
subclass = old_subclasses[name];
} else {
- subclass.instance();
+ Ref<GDScript> orphan_subclass = GDScriptLanguage::get_singleton()->get_orphan_subclass(fully_qualified_name);
+ if (orphan_subclass.is_valid()) {
+ subclass = orphan_subclass;
+ } else {
+ subclass.instance();
+ }
}
subclass->_owner = p_script;
+ subclass->fully_qualified_name = fully_qualified_name;
p_script->subclasses.insert(name, subclass);
_make_scripts(subclass.ptr(), p_class->subclasses[i], false);
@@ -2149,6 +2156,9 @@ Error GDScriptCompiler::compile(const GDScriptParser *p_parser, GDScript *p_scri
source = p_script->get_path();
+ // The best fully qualified name for a base level script is its file path
+ p_script->fully_qualified_name = p_script->path;
+
// Create scripts for subclasses beforehand so they can be referenced
_make_scripts(p_script, static_cast<const GDScriptParser::ClassNode *>(root), p_keep_state);
diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp
index e2f2b7fc3b..65c61cb57c 100644
--- a/modules/gdscript/gdscript_editor.cpp
+++ b/modules/gdscript/gdscript_editor.cpp
@@ -335,7 +335,9 @@ void GDScriptLanguage::debug_get_stack_level_members(int p_level, List<String> *
ScriptInstance *GDScriptLanguage::debug_get_stack_level_instance(int p_level) {
- ERR_FAIL_COND_V(_debug_parse_err_line >= 0, NULL);
+ if (_debug_parse_err_line >= 0)
+ return NULL;
+
ERR_FAIL_INDEX_V(p_level, _debug_call_stack_pos, NULL);
int l = _debug_call_stack_pos - p_level - 1;
@@ -555,7 +557,7 @@ static String _get_visual_datatype(const PropertyInfo &p_info, bool p_isarg = tr
}
if (p_info.type == Variant::NIL) {
if (p_isarg || (p_info.usage & PROPERTY_USAGE_NIL_IS_VARIANT)) {
- return "var";
+ return "Variant";
} else {
return "void";
}
@@ -1736,14 +1738,12 @@ static String _make_arguments_hint(const MethodInfo &p_info, int p_arg_idx) {
for (const List<PropertyInfo>::Element *E = p_info.arguments.front(); E; E = E->next()) {
if (i > 0) {
arghint += ", ";
- } else {
- arghint += " ";
}
if (i == p_arg_idx) {
arghint += String::chr(0xFFFF);
}
- arghint += _get_visual_datatype(E->get(), true) + " " + E->get().name;
+ arghint += E->get().name + ": " + _get_visual_datatype(E->get(), true);
if (i - def_args >= 0) {
arghint += String(" = ") + p_info.default_arguments[i - def_args].get_construct_string();
@@ -1759,8 +1759,6 @@ static String _make_arguments_hint(const MethodInfo &p_info, int p_arg_idx) {
if (p_info.flags & METHOD_FLAG_VARARG) {
if (p_info.arguments.size() > 0) {
arghint += ", ";
- } else {
- arghint += " ";
}
if (p_arg_idx >= p_info.arguments.size()) {
arghint += String::chr(0xFFFF);
@@ -1770,9 +1768,6 @@ static String _make_arguments_hint(const MethodInfo &p_info, int p_arg_idx) {
arghint += String::chr(0xFFFF);
}
}
- if (p_info.arguments.size() > 0 || (p_info.flags & METHOD_FLAG_VARARG)) {
- arghint += " ";
- }
arghint += ")";
@@ -1787,14 +1782,12 @@ static String _make_arguments_hint(const GDScriptParser::FunctionNode *p_functio
for (int i = 0; i < p_function->arguments.size(); i++) {
if (i > 0) {
arghint += ", ";
- } else {
- arghint += " ";
}
if (i == p_arg_idx) {
arghint += String::chr(0xFFFF);
}
- arghint += p_function->argument_types[i].to_string() + " " + p_function->arguments[i].operator String();
+ arghint += p_function->arguments[i].operator String() + ": " + p_function->argument_types[i].to_string();
if (i - def_args >= 0) {
String def_val = "<unknown>";
@@ -1818,9 +1811,6 @@ static String _make_arguments_hint(const GDScriptParser::FunctionNode *p_functio
}
}
- if (p_function->arguments.size() > 0) {
- arghint += " ";
- }
arghint += ")";
return arghint;
diff --git a/modules/gdscript/gdscript_function.cpp b/modules/gdscript/gdscript_function.cpp
index eef39da8b5..524be480d7 100644
--- a/modules/gdscript/gdscript_function.cpp
+++ b/modules/gdscript/gdscript_function.cpp
@@ -67,23 +67,23 @@ Variant *GDScriptFunction::_get_variant(int p_address, GDScriptInstance *p_insta
case ADDR_TYPE_CLASS_CONSTANT: {
//todo change to index!
- GDScript *o = p_script;
+ GDScript *s = p_script;
#ifdef DEBUG_ENABLED
ERR_FAIL_INDEX_V(address, _global_names_count, NULL);
#endif
const StringName *sn = &_global_names_ptr[address];
- while (o) {
- GDScript *s = o;
- while (s) {
+ while (s) {
+ GDScript *o = s;
+ while (o) {
- Map<StringName, Variant>::Element *E = s->constants.find(*sn);
+ Map<StringName, Variant>::Element *E = o->constants.find(*sn);
if (E) {
return &E->get();
}
- s = s->_base;
+ o = o->_owner;
}
- o = o->_owner;
+ s = s->_base;
}
ERR_FAIL_V_MSG(NULL, "GDScriptCompiler bug.");
diff --git a/modules/gdscript/gdscript_function.h b/modules/gdscript/gdscript_function.h
index 236ca720a2..ad95ebc543 100644
--- a/modules/gdscript/gdscript_function.h
+++ b/modules/gdscript/gdscript_function.h
@@ -76,14 +76,17 @@ struct GDScriptDataType {
if (p_variant.get_type() != Variant::OBJECT) {
return false;
}
+
Object *obj = p_variant.operator Object *();
- if (obj) {
- if (!ClassDB::is_parent_class(obj->get_class_name(), native_type)) {
- // Try with underscore prefix
- StringName underscore_native_type = "_" + native_type;
- if (!ClassDB::is_parent_class(obj->get_class_name(), underscore_native_type)) {
- return false;
- }
+ if (!obj || !ObjectDB::instance_validate(obj)) {
+ return false;
+ }
+
+ if (!ClassDB::is_parent_class(obj->get_class_name(), native_type)) {
+ // Try with underscore prefix
+ StringName underscore_native_type = "_" + native_type;
+ if (!ClassDB::is_parent_class(obj->get_class_name(), underscore_native_type)) {
+ return false;
}
}
return true;
@@ -96,7 +99,12 @@ struct GDScriptDataType {
if (p_variant.get_type() != Variant::OBJECT) {
return false;
}
+
Object *obj = p_variant.operator Object *();
+ if (!obj || !ObjectDB::instance_validate(obj)) {
+ return false;
+ }
+
Ref<Script> base = obj && obj->get_script_instance() ? obj->get_script_instance()->get_script() : NULL;
bool valid = false;
while (base.is_valid()) {
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp
index dcf5d35e36..5c2e7137bf 100644
--- a/modules/gdscript/gdscript_parser.cpp
+++ b/modules/gdscript/gdscript_parser.cpp
@@ -4741,10 +4741,6 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
member.line = tokenizer->get_token_line();
member.usages = 0;
member.rpc_mode = rpc_mode;
-#ifdef TOOLS_ENABLED
- Variant::CallError ce;
- member.default_value = Variant::construct(member._export.type, NULL, 0, ce);
-#endif
if (current_class->constant_expressions.has(member.identifier)) {
_set_error("A constant named \"" + String(member.identifier) + "\" already exists in this class (at line: " +
@@ -4797,6 +4793,32 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
}
}
+ if (autoexport && member.data_type.has_type) {
+ if (member.data_type.kind == DataType::BUILTIN) {
+ member._export.type = member.data_type.builtin_type;
+ } else if (member.data_type.kind == DataType::NATIVE) {
+ if (ClassDB::is_parent_class(member.data_type.native_type, "Resource")) {
+ member._export.type = Variant::OBJECT;
+ member._export.hint = PROPERTY_HINT_RESOURCE_TYPE;
+ member._export.usage |= PROPERTY_USAGE_SCRIPT_VARIABLE;
+ member._export.hint_string = member.data_type.native_type;
+ member._export.class_name = member.data_type.native_type;
+ } else {
+ _set_error("Invalid export type. Only built-in and native resource types can be exported.", member.line);
+ return;
+ }
+
+ } else {
+ _set_error("Invalid export type. Only built-in and native resource types can be exported.", member.line);
+ return;
+ }
+ }
+
+#ifdef TOOLS_ENABLED
+ Variant::CallError ce;
+ member.default_value = Variant::construct(member._export.type, NULL, 0, ce);
+#endif
+
if (tokenizer->get_token() == GDScriptTokenizer::TK_OP_ASSIGN) {
#ifdef DEBUG_ENABLED
@@ -4930,27 +4952,6 @@ void GDScriptParser::_parse_class(ClassNode *p_class) {
member.initial_assignment = op;
}
- if (autoexport && member.data_type.has_type) {
- if (member.data_type.kind == DataType::BUILTIN) {
- member._export.type = member.data_type.builtin_type;
- } else if (member.data_type.kind == DataType::NATIVE) {
- if (ClassDB::is_parent_class(member.data_type.native_type, "Resource")) {
- member._export.type = Variant::OBJECT;
- member._export.hint = PROPERTY_HINT_RESOURCE_TYPE;
- member._export.usage |= PROPERTY_USAGE_SCRIPT_VARIABLE;
- member._export.hint_string = member.data_type.native_type;
- member._export.class_name = member.data_type.native_type;
- } else {
- _set_error("Invalid export type. Only built-in and native resource types can be exported.", member.line);
- return;
- }
-
- } else {
- _set_error("Invalid export type. Only built-in and native resource types can be exported.", member.line);
- return;
- }
- }
-
if (tokenizer->get_token() == GDScriptTokenizer::TK_PR_SETGET) {
tokenizer->advance();
@@ -7046,12 +7047,10 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat
return_type = _type_from_property(mi.return_val, false);
-#ifdef DEBUG_ENABLED
// Check all arguments beforehand to solve warnings
for (int i = 1; i < p_call->arguments.size(); i++) {
_reduce_node_type(p_call->arguments[i]);
}
-#endif // DEBUG_ENABLED
// Check arguments
@@ -7079,12 +7078,10 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat
ERR_FAIL_V(DataType());
}
-#ifdef DEBUG_ENABLED
// Check all arguments beforehand to solve warnings
for (int i = arg_id + 1; i < p_call->arguments.size(); i++) {
_reduce_node_type(p_call->arguments[i]);
}
-#endif // DEBUG_ENABLED
IdentifierNode *func_id = static_cast<IdentifierNode *>(p_call->arguments[arg_id]);
callee_name = func_id->name;
@@ -8210,12 +8207,10 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) {
_add_warning(GDScriptWarning::FUNCTION_MAY_YIELD, op->line, _find_function_name(static_cast<OperatorNode *>(op->arguments[1])));
}
- bool type_match = check_types;
#endif // DEBUG_ENABLED
+ bool type_match = lh_type.has_type && rh_type.has_type;
if (check_types && !_is_type_compatible(lh_type, rh_type)) {
-#ifdef DEBUG_ENABLED
type_match = false;
-#endif // DEBUG_ENABLED
// Try supertype test
if (_is_type_compatible(rh_type, lh_type)) {
@@ -8247,9 +8242,7 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) {
op->arguments.write[1] = convert_call;
-#ifdef DEBUG_ENABLED
type_match = true; // Since we are converting, the type is matching
-#endif // DEBUG_ENABLED
}
#ifdef DEBUG_ENABLED
if (lh_type.builtin_type == Variant::INT && rh_type.builtin_type == Variant::REAL) {
@@ -8262,10 +8255,8 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) {
if (!rh_type.has_type && (op->op != OperatorNode::OP_ASSIGN || lh_type.has_type || op->arguments[0]->type == Node::TYPE_OPERATOR)) {
_mark_line_as_unsafe(op->line);
}
- op->datatype.has_type = type_match;
-#else
- op->datatype.has_type = false;
#endif // DEBUG_ENABLED
+ op->datatype.has_type = type_match;
} break;
case OperatorNode::OP_CALL:
case OperatorNode::OP_PARENT_CALL: {
diff --git a/modules/gdscript/language_server/gdscript_extend_parser.cpp b/modules/gdscript/language_server/gdscript_extend_parser.cpp
index c8ff471401..701809e755 100644
--- a/modules/gdscript/language_server/gdscript_extend_parser.cpp
+++ b/modules/gdscript/language_server/gdscript_extend_parser.cpp
@@ -112,9 +112,10 @@ void ExtendGDScriptParser::update_document_links(const String &p_code) {
FileAccessRef fs = FileAccess::create(FileAccess::ACCESS_RESOURCES);
tokenizer.set_code(p_code);
while (true) {
- if (tokenizer.get_token() == GDScriptTokenizer::TK_EOF) {
+ GDScriptTokenizerText::Token token = tokenizer.get_token();
+ if (token == GDScriptTokenizer::TK_EOF || token == GDScriptTokenizer::TK_ERROR) {
break;
- } else if (tokenizer.get_token() == GDScriptTokenizer::TK_CONSTANT) {
+ } else if (token == GDScriptTokenizer::TK_CONSTANT) {
const Variant &const_val = tokenizer.get_token_constant();
if (const_val.get_type() == Variant::STRING) {
String path = const_val;
@@ -538,16 +539,16 @@ Error ExtendGDScriptParser::get_left_function_call(const lsp::Position &p_positi
}
while (c >= 0) {
- const CharType &charactor = line[c];
- if (charactor == ')') {
+ const CharType &character = line[c];
+ if (character == ')') {
++bracket_stack;
- } else if (charactor == '(') {
+ } else if (character == '(') {
--bracket_stack;
if (bracket_stack < 0) {
found = true;
}
}
- if (bracket_stack <= 0 && charactor == ',') {
+ if (bracket_stack <= 0 && character == ',') {
++index;
}
--c;
diff --git a/modules/gdscript/language_server/gdscript_language_protocol.cpp b/modules/gdscript/language_server/gdscript_language_protocol.cpp
index cff7653d3a..7133c6b4be 100644
--- a/modules/gdscript/language_server/gdscript_language_protocol.cpp
+++ b/modules/gdscript/language_server/gdscript_language_protocol.cpp
@@ -156,7 +156,7 @@ void GDScriptLanguageProtocol::poll() {
server->poll();
}
-Error GDScriptLanguageProtocol::start(int p_port) {
+Error GDScriptLanguageProtocol::start(int p_port, const IP_Address &p_bind_ip) {
if (server == NULL) {
server = dynamic_cast<WebSocketServer *>(ClassDB::instance("WebSocketServer"));
ERR_FAIL_COND_V(!server, FAILED);
@@ -165,6 +165,7 @@ Error GDScriptLanguageProtocol::start(int p_port) {
server->connect("client_connected", this, "on_client_connected");
server->connect("client_disconnected", this, "on_client_disconnected");
}
+ server->set_bind_ip(p_bind_ip);
return server->listen(p_port);
}
diff --git a/modules/gdscript/language_server/gdscript_language_protocol.h b/modules/gdscript/language_server/gdscript_language_protocol.h
index e45db274e9..52c680ab19 100644
--- a/modules/gdscript/language_server/gdscript_language_protocol.h
+++ b/modules/gdscript/language_server/gdscript_language_protocol.h
@@ -77,7 +77,7 @@ public:
_FORCE_INLINE_ bool is_initialized() const { return _initialized; }
void poll();
- Error start(int p_port);
+ Error start(int p_port, const IP_Address &p_bind_ip);
void stop();
void notify_all_clients(const String &p_method, const Variant &p_params = Variant());
diff --git a/modules/gdscript/language_server/gdscript_language_server.cpp b/modules/gdscript/language_server/gdscript_language_server.cpp
index 19bb3ed1ee..7170c63058 100644
--- a/modules/gdscript/language_server/gdscript_language_server.cpp
+++ b/modules/gdscript/language_server/gdscript_language_server.cpp
@@ -84,7 +84,7 @@ void GDScriptLanguageServer::thread_main(void *p_userdata) {
void GDScriptLanguageServer::start() {
port = (int)_EDITOR_GET("network/language_server/remote_port");
use_thread = (bool)_EDITOR_GET("network/language_server/use_thread");
- if (protocol.start(port) == OK) {
+ if (protocol.start(port, IP_Address("127.0.0.1")) == OK) {
EditorNode::get_log()->add_message("--- GDScript language server started ---", EditorLog::MSG_TYPE_EDITOR);
if (use_thread) {
ERR_FAIL_COND(thread != NULL);
diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp
index 8126c9338f..3d40220869 100644
--- a/modules/gridmap/grid_map.cpp
+++ b/modules/gridmap/grid_map.cpp
@@ -122,7 +122,7 @@ bool GridMap::_get(const StringName &p_name, Variant &r_ret) const {
Array ret;
ret.resize(baked_meshes.size());
for (int i = 0; i < baked_meshes.size(); i++) {
- ret.push_back(baked_meshes[i].mesh);
+ ret[i] = baked_meshes[i].mesh;
}
r_ret = ret;
diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp
index d82e78d080..0f6b8357b8 100644
--- a/modules/mono/csharp_script.cpp
+++ b/modules/mono/csharp_script.cpp
@@ -159,6 +159,19 @@ void CSharpLanguage::finish() {
// Clear here, after finalizing all domains to make sure there is nothing else referencing the elements.
script_bindings.clear();
+#ifdef DEBUG_ENABLED
+ for (List<ObjectID>::Element *E = unsafely_referenced_objects.front(); E; E = E->next()) {
+ const ObjectID &id = E->get();
+ Object *obj = ObjectDB::get_instance(id);
+
+ if (obj) {
+ ERR_PRINTS("Leaked unsafe reference to object: " + obj->get_class() + ":" + itos(id));
+ } else {
+ ERR_PRINTS("Leaked unsafe reference to deleted object: " + itos(id));
+ }
+ }
+#endif
+
finalizing = false;
}
@@ -546,6 +559,7 @@ Vector<ScriptLanguage::StackInfo> CSharpLanguage::debug_get_current_stack_info()
#ifdef DEBUG_ENABLED
_TLS_RECURSION_GUARD_V_(Vector<StackInfo>());
+ GD_MONO_SCOPE_THREAD_ATTACH;
if (!gdmono->is_runtime_initialized() || !GDMono::get_singleton()->get_core_api_assembly() || !GDMonoCache::cached_data.corlib_cache_updated)
return Vector<StackInfo>();
@@ -570,6 +584,7 @@ Vector<ScriptLanguage::StackInfo> CSharpLanguage::debug_get_current_stack_info()
Vector<ScriptLanguage::StackInfo> CSharpLanguage::stack_trace_get_info(MonoObject *p_stack_trace) {
_TLS_RECURSION_GUARD_V_(Vector<StackInfo>());
+ GD_MONO_SCOPE_THREAD_ATTACH;
MonoException *exc = NULL;
@@ -615,6 +630,23 @@ Vector<ScriptLanguage::StackInfo> CSharpLanguage::stack_trace_get_info(MonoObjec
}
#endif
+void CSharpLanguage::post_unsafe_reference(Object *p_obj) {
+#ifdef DEBUG_ENABLED
+ ObjectID id = p_obj->get_instance_id();
+ ERR_FAIL_COND_MSG(unsafely_referenced_objects.find(id), "Multiple unsafe references for object: " + p_obj->get_class() + ":" + itos(id));
+ unsafely_referenced_objects.push_back(id);
+#endif
+}
+
+void CSharpLanguage::pre_unsafe_unreference(Object *p_obj) {
+#ifdef DEBUG_ENABLED
+ ObjectID id = p_obj->get_instance_id();
+ List<ObjectID>::Element *elem = unsafely_referenced_objects.find(id);
+ ERR_FAIL_NULL(elem);
+ unsafely_referenced_objects.erase(elem);
+#endif
+}
+
void CSharpLanguage::frame() {
if (gdmono && gdmono->is_runtime_initialized() && gdmono->get_core_api_assembly() != NULL) {
@@ -659,6 +691,7 @@ void CSharpLanguage::reload_all_scripts() {
#ifdef GD_MONO_HOT_RELOAD
if (is_assembly_reloading_needed()) {
+ GD_MONO_SCOPE_THREAD_ATTACH;
reload_assemblies(false);
}
#endif
@@ -676,6 +709,7 @@ void CSharpLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_soft
#ifdef GD_MONO_HOT_RELOAD
if (is_assembly_reloading_needed()) {
+ GD_MONO_SCOPE_THREAD_ATTACH;
reload_assemblies(p_soft_reload);
}
#endif
@@ -1286,6 +1320,7 @@ bool CSharpLanguage::setup_csharp_script_binding(CSharpScriptBinding &r_script_b
// See: godot_icall_Reference_Dtor(MonoObject *p_obj, Object *p_ptr)
ref->reference();
+ CSharpLanguage::get_singleton()->post_unsafe_reference(ref);
}
return true;
@@ -1325,6 +1360,8 @@ void CSharpLanguage::free_instance_binding_data(void *p_data) {
if (finalizing)
return; // inside CSharpLanguage::finish(), all the gchandle bindings are released there
+ GD_MONO_ASSERT_THREAD_ATTACHED;
+
{
SCOPED_MUTEX_LOCK(language_bind_mutex);
@@ -1351,6 +1388,7 @@ void CSharpLanguage::refcount_incremented_instance_binding(Object *p_object) {
#ifdef DEBUG_ENABLED
CRASH_COND(!ref_owner);
+ CRASH_COND(!p_object->has_script_instance_binding(get_language_index()));
#endif
void *data = p_object->get_script_instance_binding(get_language_index());
@@ -1363,6 +1401,8 @@ void CSharpLanguage::refcount_incremented_instance_binding(Object *p_object) {
return;
if (ref_owner->reference_get_count() > 1 && gchandle->is_weak()) { // The managed side also holds a reference, hence 1 instead of 0
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
// The reference count was increased after the managed side was the only one referencing our owner.
// This means the owner is being referenced again by the unmanaged side,
// so the owner must hold the managed side alive again to avoid it from being GCed.
@@ -1384,6 +1424,7 @@ bool CSharpLanguage::refcount_decremented_instance_binding(Object *p_object) {
#ifdef DEBUG_ENABLED
CRASH_COND(!ref_owner);
+ CRASH_COND(!p_object->has_script_instance_binding(get_language_index()));
#endif
void *data = p_object->get_script_instance_binding(get_language_index());
@@ -1398,6 +1439,8 @@ bool CSharpLanguage::refcount_decremented_instance_binding(Object *p_object) {
return refcount == 0;
if (refcount == 1 && gchandle.is_valid() && !gchandle->is_weak()) { // The managed side also holds a reference, hence 1 instead of 0
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
// If owner owner is no longer referenced by the unmanaged side,
// the managed instance takes responsibility of deleting the owner when GCed.
@@ -1449,6 +1492,8 @@ bool CSharpInstance::set(const StringName &p_name, const Variant &p_value) {
ERR_FAIL_COND_V(!script.is_valid(), false);
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
MonoObject *mono_object = get_mono_object();
ERR_FAIL_NULL_V(mono_object, false);
@@ -1501,6 +1546,8 @@ bool CSharpInstance::get(const StringName &p_name, Variant &r_ret) const {
ERR_FAIL_COND_V(!script.is_valid(), false);
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
MonoObject *mono_object = get_mono_object();
ERR_FAIL_NULL_V(mono_object, false);
@@ -1594,6 +1641,8 @@ void CSharpInstance::get_property_list(List<PropertyInfo> *p_properties) const {
ERR_FAIL_COND(!script.is_valid());
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
MonoObject *mono_object = get_mono_object();
ERR_FAIL_NULL(mono_object);
@@ -1638,6 +1687,8 @@ bool CSharpInstance::has_method(const StringName &p_method) const {
if (!script.is_valid())
return false;
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
GDMonoClass *top = script->script_class;
while (top && top != script->native) {
@@ -1653,6 +1704,11 @@ bool CSharpInstance::has_method(const StringName &p_method) const {
Variant CSharpInstance::call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) {
+ if (!script.is_valid())
+ ERR_FAIL_V(Variant());
+
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
MonoObject *mono_object = get_mono_object();
if (!mono_object) {
@@ -1660,9 +1716,6 @@ Variant CSharpInstance::call(const StringName &p_method, const Variant **p_args,
ERR_FAIL_V(Variant());
}
- if (!script.is_valid())
- ERR_FAIL_V(Variant());
-
GDMonoClass *top = script->script_class;
while (top && top != script->native) {
@@ -1690,6 +1743,8 @@ Variant CSharpInstance::call(const StringName &p_method, const Variant **p_args,
void CSharpInstance::call_multilevel(const StringName &p_method, const Variant **p_args, int p_argcount) {
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
if (script.is_valid()) {
MonoObject *mono_object = get_mono_object();
@@ -1701,6 +1756,8 @@ void CSharpInstance::call_multilevel(const StringName &p_method, const Variant *
void CSharpInstance::_call_multilevel(MonoObject *p_mono_object, const StringName &p_method, const Variant **p_args, int p_argcount) {
+ GD_MONO_ASSERT_THREAD_ATTACHED;
+
GDMonoClass *top = script->script_class;
while (top && top != script->native) {
@@ -1736,9 +1793,12 @@ bool CSharpInstance::_reference_owner_unsafe() {
// See: _unreference_owner_unsafe()
// May not me referenced yet, so we must use init_ref() instead of reference()
- bool success = Object::cast_to<Reference>(owner)->init_ref();
- unsafe_referenced = success;
- return success;
+ if (static_cast<Reference *>(owner)->init_ref()) {
+ CSharpLanguage::get_singleton()->post_unsafe_reference(owner);
+ unsafe_referenced = true;
+ }
+
+ return unsafe_referenced;
}
bool CSharpInstance::_unreference_owner_unsafe() {
@@ -1759,6 +1819,7 @@ bool CSharpInstance::_unreference_owner_unsafe() {
// See: _reference_owner_unsafe()
// Destroying the owner here means self destructing, so we defer the owner destruction to the caller.
+ CSharpLanguage::get_singleton()->pre_unsafe_unreference(owner);
return static_cast<Reference *>(owner)->unreference();
}
@@ -1859,6 +1920,8 @@ void CSharpInstance::refcount_incremented() {
Reference *ref_owner = Object::cast_to<Reference>(owner);
if (ref_owner->reference_get_count() > 1 && gchandle->is_weak()) { // The managed side also holds a reference, hence 1 instead of 0
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
// The reference count was increased after the managed side was the only one referencing our owner.
// This means the owner is being referenced again by the unmanaged side,
// so the owner must hold the managed side alive again to avoid it from being GCed.
@@ -1882,6 +1945,8 @@ bool CSharpInstance::refcount_decremented() {
int refcount = ref_owner->reference_get_count();
if (refcount == 1 && !gchandle->is_weak()) { // The managed side also holds a reference, hence 1 instead of 0
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
// If owner owner is no longer referenced by the unmanaged side,
// the managed instance takes responsibility of deleting the owner when GCed.
@@ -1922,6 +1987,8 @@ MultiplayerAPI::RPCMode CSharpInstance::_member_get_rpc_mode(IMonoClassMember *p
MultiplayerAPI::RPCMode CSharpInstance::get_rpc_mode(const StringName &p_method) const {
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
GDMonoClass *top = script->script_class;
while (top && top != script->native) {
@@ -1938,6 +2005,8 @@ MultiplayerAPI::RPCMode CSharpInstance::get_rpc_mode(const StringName &p_method)
MultiplayerAPI::RPCMode CSharpInstance::get_rset_mode(const StringName &p_variable) const {
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
GDMonoClass *top = script->script_class;
while (top && top != script->native) {
@@ -1959,6 +2028,8 @@ MultiplayerAPI::RPCMode CSharpInstance::get_rset_mode(const StringName &p_variab
void CSharpInstance::notification(int p_notification) {
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
if (p_notification == Object::NOTIFICATION_PREDELETE) {
// When NOTIFICATION_PREDELETE is sent, we also take the chance to call Dispose().
// It's safe to call Dispose() multiple times and NOTIFICATION_PREDELETE is guaranteed
@@ -1996,6 +2067,8 @@ void CSharpInstance::notification(int p_notification) {
void CSharpInstance::_call_notification(int p_notification) {
+ GD_MONO_ASSERT_THREAD_ATTACHED;
+
MonoObject *mono_object = get_mono_object();
ERR_FAIL_NULL(mono_object);
@@ -2020,6 +2093,8 @@ void CSharpInstance::_call_notification(int p_notification) {
}
String CSharpInstance::to_string(bool *r_valid) {
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
MonoObject *mono_object = get_mono_object();
if (mono_object == NULL) {
@@ -2068,6 +2143,8 @@ CSharpInstance::CSharpInstance() :
CSharpInstance::~CSharpInstance() {
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
destructing_script_instance = true;
if (gchandle.is_valid()) {
@@ -2099,6 +2176,17 @@ CSharpInstance::~CSharpInstance() {
// Transfer ownership to an "instance binding"
+ Reference *ref_owner = static_cast<Reference *>(owner);
+
+ // We will unreference the owner before referencing it again, so we need to keep it alive
+ Ref<Reference> scope_keep_owner_alive(ref_owner);
+ (void)scope_keep_owner_alive;
+
+ // Unreference the owner here, before the new "instance binding" references it.
+ // Otherwise, the unsafe reference debug checks will incorrectly detect a bug.
+ bool die = _unreference_owner_unsafe();
+ CRASH_COND(die == true); // `owner_keep_alive` holds a reference, so it can't die
+
void *data = owner->get_script_instance_binding(CSharpLanguage::get_singleton()->get_language_index());
CRASH_COND(data == NULL);
@@ -2114,8 +2202,10 @@ CSharpInstance::~CSharpInstance() {
}
}
- bool die = _unreference_owner_unsafe();
- CRASH_COND(die == true); // The "instance binding" should be holding a reference
+#ifdef DEBUG_ENABLED
+ // The "instance binding" holds a reference so the refcount should be at least 2 before `scope_keep_owner_alive` goes out of scope
+ CRASH_COND(ref_owner->reference_get_count() <= 1);
+#endif
}
if (script.is_valid() && owner) {
@@ -2158,6 +2248,8 @@ void CSharpScript::_update_exports_values(Map<StringName, Variant> &values, List
void CSharpScript::_update_member_info_no_exports() {
if (exports_invalidated) {
+ GD_MONO_ASSERT_THREAD_ATTACHED;
+
exports_invalidated = false;
member_info.clear();
@@ -2216,6 +2308,8 @@ bool CSharpScript::_update_exports() {
bool changed = false;
if (exports_invalidated) {
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
exports_invalidated = false;
changed = true;
@@ -2243,7 +2337,11 @@ bool CSharpScript::_update_exports() {
MonoException *ctor_exc = NULL;
ctor->invoke(tmp_object, NULL, &ctor_exc);
+ Object *tmp_native = GDMonoMarshal::unbox<Object *>(CACHED_FIELD(GodotObject, ptr)->get_value(tmp_object));
+
if (ctor_exc) {
+ // TODO: Should we free 'tmp_native' if the exception was thrown after its creation?
+
MonoGCHandle::free_handle(tmp_pinned_gchandle);
tmp_object = NULL;
@@ -2322,6 +2420,15 @@ bool CSharpScript::_update_exports() {
MonoGCHandle::free_handle(tmp_pinned_gchandle);
tmp_object = NULL;
+
+ if (tmp_native && !Object::cast_to<Reference>(tmp_native)) {
+ Node *node = Object::cast_to<Node>(tmp_native);
+ if (node && node->is_inside_tree()) {
+ ERR_PRINTS("Temporary instance was added to the scene tree.");
+ } else {
+ memdelete(tmp_native);
+ }
+ }
}
placeholder_fallback_enabled = false;
@@ -2352,6 +2459,8 @@ void CSharpScript::load_script_signals(GDMonoClass *p_class, GDMonoClass *p_nati
// make sure this classes signals are empty when loading for the first time
_signals.clear();
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
GDMonoClass *top = p_class;
while (top && top != p_native_class) {
const Vector<GDMonoClass *> &delegates = top->get_all_delegates();
@@ -2372,6 +2481,8 @@ void CSharpScript::load_script_signals(GDMonoClass *p_class, GDMonoClass *p_nati
}
bool CSharpScript::_get_signal(GDMonoClass *p_class, GDMonoClass *p_delegate, Vector<Argument> &params) {
+ GD_MONO_ASSERT_THREAD_ATTACHED;
+
if (p_delegate->has_attribute(CACHED_CLASS(SignalAttribute))) {
MonoType *raw_type = p_delegate->get_mono_type();
@@ -2413,6 +2524,8 @@ bool CSharpScript::_get_signal(GDMonoClass *p_class, GDMonoClass *p_delegate, Ve
*/
bool CSharpScript::_get_member_export(IMonoClassMember *p_member, bool p_inspect_export, PropertyInfo &r_prop_info, bool &r_exported) {
+ GD_MONO_ASSERT_THREAD_ATTACHED;
+
// Goddammit, C++. All I wanted was some nested functions.
#define MEMBER_FULL_QUALIFIED_NAME(m_member) \
(m_member->get_enclosing_class()->get_full_name() + "." + (String)m_member->get_name())
@@ -2491,6 +2604,8 @@ bool CSharpScript::_get_member_export(IMonoClassMember *p_member, bool p_inspect
int CSharpScript::_try_get_member_export_hint(IMonoClassMember *p_member, ManagedType p_type, Variant::Type p_variant_type, bool p_allow_generics, PropertyHint &r_hint, String &r_hint_string) {
+ GD_MONO_ASSERT_THREAD_ATTACHED;
+
if (p_variant_type == Variant::INT && p_type.type_encoding == MONO_TYPE_VALUETYPE && mono_class_is_enum(p_type.type_class->get_mono_ptr())) {
r_hint = PROPERTY_HINT_ENUM;
@@ -2600,6 +2715,8 @@ Variant CSharpScript::call(const StringName &p_method, const Variant **p_args, i
return Variant();
}
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
GDMonoClass *top = script_class;
while (top && top != native) {
@@ -2792,6 +2909,8 @@ StringName CSharpScript::get_instance_base_type() const {
CSharpInstance *CSharpScript::_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_isref, Variant::CallError &r_error) {
+ GD_MONO_ASSERT_THREAD_ATTACHED;
+
/* STEP 1, CREATE */
// Search the constructor first, to fail with an error if it's not found before allocating anything else.
@@ -2886,12 +3005,14 @@ Variant CSharpScript::_new(const Variant **p_args, int p_argcount, Variant::Call
}
r_error.error = Variant::CallError::CALL_OK;
- REF ref;
ERR_FAIL_NULL_V(native, Variant());
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
Object *owner = ClassDB::instance(NATIVE_GDMONOCLASS_NAME(native));
+ REF ref;
Reference *r = Object::cast_to<Reference>(owner);
if (r) {
ref = REF(r);
@@ -2929,6 +3050,8 @@ ScriptInstance *CSharpScript::instance_create(Object *p_this) {
}
}
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
Variant::CallError unchecked_error;
return _create_instance(NULL, 0, p_this, Object::cast_to<Reference>(p_this) != NULL, unchecked_error);
}
@@ -2976,6 +3099,8 @@ void CSharpScript::get_script_method_list(List<MethodInfo> *p_list) const {
if (!script_class)
return;
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
// TODO: Filter out things unsuitable for explicit calls, like constructors.
const Vector<GDMonoMethod *> &methods = script_class->get_all_methods();
for (int i = 0; i < methods.size(); ++i) {
@@ -2988,6 +3113,8 @@ bool CSharpScript::has_method(const StringName &p_method) const {
if (!script_class)
return false;
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
return script_class->has_fetched_method_unknown_params(p_method);
}
@@ -2996,6 +3123,8 @@ MethodInfo CSharpScript::get_method_info(const StringName &p_method) const {
if (!script_class)
return MethodInfo();
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
GDMonoClass *top = script_class;
while (top && top != native) {
@@ -3020,6 +3149,8 @@ Error CSharpScript::reload(bool p_keep_state) {
ERR_FAIL_COND_V(!p_keep_state && has_instances, ERR_ALREADY_IN_USE);
+ GD_MONO_SCOPE_THREAD_ATTACH;
+
GDMonoAssembly *project_assembly = GDMono::get_singleton()->get_project_assembly();
if (project_assembly) {
@@ -3247,39 +3378,7 @@ RES ResourceFormatLoaderCSharpScript::load(const String &p_path, const String &p
script->set_path(p_original_path);
-#ifndef TOOLS_ENABLED
-
-#ifdef DEBUG_ENABLED
- // User is responsible for thread attach/detach
- CRASH_COND_MSG(mono_domain_get() == NULL, "Thread is not attached.");
-#endif
-
-#endif
-
-#ifdef TOOLS_ENABLED
- MonoDomain *domain = mono_domain_get();
- if (Engine::get_singleton()->is_editor_hint() && domain == NULL) {
-
- CRASH_COND(Thread::get_caller_id() == Thread::get_main_id());
-
- // Thread is not attached, but we will make an exception in this case
- // because this may be called by one of the editor's worker threads.
- // Attach this thread temporarily to reload the script.
-
- if (domain) {
- MonoThread *mono_thread = mono_thread_attach(domain);
- CRASH_COND(mono_thread == NULL);
- script->reload();
- mono_thread_detach(mono_thread);
- }
-
- } else { // just reload it normally
-#endif
- script->reload();
-
-#ifdef TOOLS_ENABLED
- }
-#endif
+ script->reload();
if (r_error)
*r_error = OK;
diff --git a/modules/mono/csharp_script.h b/modules/mono/csharp_script.h
index 027f429125..30f56e00bd 100644
--- a/modules/mono/csharp_script.h
+++ b/modules/mono/csharp_script.h
@@ -307,6 +307,11 @@ class CSharpLanguage : public ScriptLanguage {
Map<Object *, CSharpScriptBinding> script_bindings;
+#ifdef DEBUG_ENABLED
+ // List of unsafely referenced objects
+ List<ObjectID> unsafely_referenced_objects;
+#endif
+
struct StringNameCache {
StringName _signal_callback;
@@ -458,6 +463,9 @@ public:
Vector<StackInfo> stack_trace_get_info(MonoObject *p_stack_trace);
#endif
+ void post_unsafe_reference(Object *p_obj);
+ void pre_unsafe_unreference(Object *p_obj);
+
CSharpLanguage();
~CSharpLanguage();
};
diff --git a/modules/mono/glue/base_object_glue.cpp b/modules/mono/glue/base_object_glue.cpp
index 04a489f1f9..02246b2f2f 100644
--- a/modules/mono/glue/base_object_glue.cpp
+++ b/modules/mono/glue/base_object_glue.cpp
@@ -108,6 +108,7 @@ void godot_icall_Reference_Disposed(MonoObject *p_obj, Object *p_ptr, MonoBoolea
// Unsafe refcount decrement. The managed instance also counts as a reference.
// See: CSharpLanguage::alloc_instance_binding_data(Object *p_object)
+ CSharpLanguage::get_singleton()->pre_unsafe_unreference(ref);
if (ref->unreference()) {
memdelete(ref);
} else {
diff --git a/modules/mono/mono_gd/gd_mono_assembly.cpp b/modules/mono/mono_gd/gd_mono_assembly.cpp
index 9d7ac5c5ea..6cf5377e2c 100644
--- a/modules/mono/mono_gd/gd_mono_assembly.cpp
+++ b/modules/mono/mono_gd/gd_mono_assembly.cpp
@@ -129,7 +129,7 @@ MonoAssembly *GDMonoAssembly::_search_hook(MonoAssemblyName *aname, void *user_d
(void)user_data; // UNUSED
- String name = mono_assembly_name_get_name(aname);
+ String name = String::utf8(mono_assembly_name_get_name(aname));
bool has_extension = name.ends_with(".dll") || name.ends_with(".exe");
if (no_search)
@@ -176,7 +176,7 @@ MonoAssembly *GDMonoAssembly::_preload_hook(MonoAssemblyName *aname, char **, vo
no_search = true;
in_preload = true;
- String name = mono_assembly_name_get_name(aname);
+ String name = String::utf8(mono_assembly_name_get_name(aname));
bool has_extension = name.ends_with(".dll");
GDMonoAssembly *res = NULL;
@@ -276,7 +276,7 @@ GDMonoAssembly *GDMonoAssembly::_load_assembly_from(const String &p_name, const
}
void GDMonoAssembly::_wrap_mono_assembly(MonoAssembly *assembly) {
- String name = mono_assembly_name_get_name(mono_assembly_get_name(assembly));
+ String name = String::utf8(mono_assembly_name_get_name(mono_assembly_get_name(assembly)));
MonoImage *image = mono_assembly_get_image(assembly);
diff --git a/modules/mono/mono_gd/gd_mono_internals.cpp b/modules/mono/mono_gd/gd_mono_internals.cpp
index 8669182c4e..75aa77c7b0 100644
--- a/modules/mono/mono_gd/gd_mono_internals.cpp
+++ b/modules/mono/mono_gd/gd_mono_internals.cpp
@@ -83,7 +83,9 @@ void tie_managed_to_unmanaged(MonoObject *managed, Object *unmanaged) {
// See: godot_icall_Reference_Dtor(MonoObject *p_obj, Object *p_ptr)
// May not me referenced yet, so we must use init_ref() instead of reference()
- ref->init_ref();
+ if (ref->init_ref()) {
+ CSharpLanguage::get_singleton()->post_unsafe_reference(ref);
+ }
}
// The object was just created, no script instance binding should have been attached
diff --git a/modules/mono/mono_gd/gd_mono_utils.cpp b/modules/mono/mono_gd/gd_mono_utils.cpp
index 3c8aa0c727..4e7f590a69 100644
--- a/modules/mono/mono_gd/gd_mono_utils.cpp
+++ b/modules/mono/mono_gd/gd_mono_utils.cpp
@@ -115,6 +115,7 @@ MonoObject *unmanaged_get_managed(Object *unmanaged) {
// but the managed instance is alive, the refcount will be 1 instead of 0.
// See: godot_icall_Reference_Dtor(MonoObject *p_obj, Object *p_ptr)
ref->reference();
+ CSharpLanguage::get_singleton()->post_unsafe_reference(ref);
}
return mono_object;
@@ -124,10 +125,12 @@ void set_main_thread(MonoThread *p_thread) {
mono_thread_set_main(p_thread);
}
-void attach_current_thread() {
- ERR_FAIL_COND(!GDMono::get_singleton()->is_runtime_initialized());
- MonoThread *mono_thread = mono_thread_attach(mono_get_root_domain());
- ERR_FAIL_NULL(mono_thread);
+MonoThread *attach_current_thread() {
+ ERR_FAIL_COND_V(!GDMono::get_singleton()->is_runtime_initialized(), NULL);
+ MonoDomain *scripts_domain = GDMono::get_singleton()->get_scripts_domain();
+ MonoThread *mono_thread = mono_thread_attach(scripts_domain ? scripts_domain : mono_get_root_domain());
+ ERR_FAIL_NULL_V(mono_thread, NULL);
+ return mono_thread;
}
void detach_current_thread() {
@@ -137,10 +140,20 @@ void detach_current_thread() {
mono_thread_detach(mono_thread);
}
+void detach_current_thread(MonoThread *p_mono_thread) {
+ ERR_FAIL_COND(!GDMono::get_singleton()->is_runtime_initialized());
+ ERR_FAIL_NULL(p_mono_thread);
+ mono_thread_detach(p_mono_thread);
+}
+
MonoThread *get_current_thread() {
return mono_thread_current();
}
+bool is_thread_attached() {
+ return mono_domain_get() != NULL;
+}
+
void runtime_object_init(MonoObject *p_this_obj, GDMonoClass *p_class, MonoException **r_exc) {
GDMonoMethod *ctor = p_class->get_method(".ctor", 0);
ERR_FAIL_NULL(ctor);
@@ -616,4 +629,19 @@ GDMonoClass *make_generic_dictionary_type(MonoReflectionType *p_key_reftype, Mon
} // namespace Marshal
+ScopeThreadAttach::ScopeThreadAttach() :
+ mono_thread(NULL) {
+ if (likely(GDMono::get_singleton()->is_runtime_initialized()) && unlikely(!mono_domain_get())) {
+ mono_thread = GDMonoUtils::attach_current_thread();
+ }
+}
+
+ScopeThreadAttach::~ScopeThreadAttach() {
+ if (unlikely(mono_thread)) {
+ GDMonoUtils::detach_current_thread(mono_thread);
+ }
+}
+
+// namespace Marshal
+
} // namespace GDMonoUtils
diff --git a/modules/mono/mono_gd/gd_mono_utils.h b/modules/mono/mono_gd/gd_mono_utils.h
index d9eb912cd7..db9f99bfdc 100644
--- a/modules/mono/mono_gd/gd_mono_utils.h
+++ b/modules/mono/mono_gd/gd_mono_utils.h
@@ -83,9 +83,11 @@ _FORCE_INLINE_ void hash_combine(uint32_t &p_hash, const uint32_t &p_with_hash)
MonoObject *unmanaged_get_managed(Object *unmanaged);
void set_main_thread(MonoThread *p_thread);
-void attach_current_thread();
+MonoThread *attach_current_thread();
void detach_current_thread();
+void detach_current_thread(MonoThread *p_mono_thread);
MonoThread *get_current_thread();
+bool is_thread_attached();
_FORCE_INLINE_ bool is_main_thread() {
return mono_domain_get() != NULL && mono_thread_get_main() == mono_thread_current();
@@ -142,6 +144,14 @@ uint64_t unbox_enum_value(MonoObject *p_boxed, MonoType *p_enum_basetype, bool &
void dispose(MonoObject *p_mono_object, MonoException **r_exc);
+struct ScopeThreadAttach {
+ ScopeThreadAttach();
+ ~ScopeThreadAttach();
+
+private:
+ MonoThread *mono_thread;
+};
+
} // namespace GDMonoUtils
#define NATIVE_GDMONOCLASS_NAME(m_class) (GDMonoMarshal::mono_string_to_godot((MonoString *)m_class->get_field(BINDINGS_NATIVE_NAME_FIELD)->get_value(NULL)))
@@ -153,4 +163,15 @@ void dispose(MonoObject *p_mono_object, MonoException **r_exc);
#define GD_MONO_END_RUNTIME_INVOKE \
_runtime_invoke_count_ref -= 1;
+#define GD_MONO_SCOPE_THREAD_ATTACH \
+ GDMonoUtils::ScopeThreadAttach __gdmono__scope__thread__attach__; \
+ (void)__gdmono__scope__thread__attach__;
+
+#ifdef DEBUG_ENABLED
+#define GD_MONO_ASSERT_THREAD_ATTACHED \
+ { CRASH_COND(!GDMonoUtils::is_thread_attached()); }
+#else
+#define GD_MONO_ASSERT_THREAD_ATTACHED
+#endif
+
#endif // GD_MONOUTILS_H
diff --git a/modules/squish/image_compress_squish.cpp b/modules/squish/image_compress_squish.cpp
index ef4ea93e57..58b8115dfc 100644
--- a/modules/squish/image_compress_squish.cpp
+++ b/modules/squish/image_compress_squish.cpp
@@ -73,7 +73,6 @@ void image_decompress_squish(Image *p_image) {
p_image->create(p_image->get_width(), p_image->get_height(), p_image->has_mipmaps(), target_format, data);
}
-#ifdef TOOLS_ENABLED
void image_compress_squish(Image *p_image, float p_lossy_quality, Image::CompressSource p_source) {
if (p_image->get_format() >= Image::FORMAT_DXT1)
@@ -203,4 +202,3 @@ void image_compress_squish(Image *p_image, float p_lossy_quality, Image::Compres
p_image->create(p_image->get_width(), p_image->get_height(), p_image->has_mipmaps(), target_format, data);
}
}
-#endif
diff --git a/modules/squish/image_compress_squish.h b/modules/squish/image_compress_squish.h
index 2666815e47..b5a209ceb9 100644
--- a/modules/squish/image_compress_squish.h
+++ b/modules/squish/image_compress_squish.h
@@ -33,9 +33,7 @@
#include "core/image.h"
-#ifdef TOOLS_ENABLED
void image_compress_squish(Image *p_image, float p_lossy_quality, Image::CompressSource p_source);
-#endif
void image_decompress_squish(Image *p_image);
#endif // IMAGE_COMPRESS_SQUISH_H
diff --git a/modules/squish/register_types.cpp b/modules/squish/register_types.cpp
index 1cd551defb..2a0cf82b56 100644
--- a/modules/squish/register_types.cpp
+++ b/modules/squish/register_types.cpp
@@ -33,9 +33,7 @@
void register_squish_types() {
-#ifdef TOOLS_ENABLED
Image::set_compress_bc_func(image_compress_squish);
-#endif
Image::_image_decompress_bc = image_decompress_squish;
}
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp
index 4bfd4f48ce..ec20698ae8 100644
--- a/modules/visual_script/visual_script_editor.cpp
+++ b/modules/visual_script/visual_script_editor.cpp
@@ -575,7 +575,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
Button *btn = memnew(Button);
btn->set_text(TTR("Add Input Port"));
hbnc->add_child(btn);
- btn->connect("pressed", this, "_add_input_port", varray(E->get()));
+ btn->connect("pressed", this, "_add_input_port", varray(E->get()), CONNECT_DEFERRED);
}
if (nd_list->is_output_port_editable()) {
if (nd_list->is_input_port_editable())
@@ -584,7 +584,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
Button *btn = memnew(Button);
btn->set_text(TTR("Add Output Port"));
hbnc->add_child(btn);
- btn->connect("pressed", this, "_add_output_port", varray(E->get()));
+ btn->connect("pressed", this, "_add_output_port", varray(E->get()), CONNECT_DEFERRED);
}
gnode->add_child(hbnc);
} else if (Object::cast_to<VisualScriptExpression>(node.ptr())) {
diff --git a/modules/websocket/doc_classes/WebSocketClient.xml b/modules/websocket/doc_classes/WebSocketClient.xml
index 705e3485f5..52a98d8c32 100644
--- a/modules/websocket/doc_classes/WebSocketClient.xml
+++ b/modules/websocket/doc_classes/WebSocketClient.xml
@@ -27,7 +27,8 @@
Connects to the given URL requesting one of the given [code]protocols[/code] as sub-protocol. If the list empty (default), no sub-protocol will be requested.
If [code]true[/code] is passed as [code]gd_mp_api[/code], the client will behave like a network peer for the [MultiplayerAPI], connections to non-Godot servers will not work, and [signal data_received] will not be emitted.
If [code]false[/code] is passed instead (default), you must call [PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], etc.) on the [WebSocketPeer] returned via [code]get_peer(1)[/code] and not on this object directly (e.g. [code]get_peer(1).put_packet(data)[/code]).
- You can optionally pass a list of [code]custom_headers[/code] to be added to the handshake HTTP request (not supported in HTML5 platform).
+ You can optionally pass a list of [code]custom_headers[/code] to be added to the handshake HTTP request.
+ [b]Note:[/b] Specifying [code]custom_headers[/code] is not supported in HTML5 exports due to browsers restrictions.
</description>
</method>
<method name="disconnect_from_host">
@@ -59,6 +60,7 @@
<members>
<member name="trusted_ssl_certificate" type="X509Certificate" setter="set_trusted_ssl_certificate" getter="get_trusted_ssl_certificate">
If specified, this [X509Certificate] will be the only one accepted when connecting to an SSL host. Any other certificate provided by the server will be regarded as invalid.
+ [b]Note:[/b] Specifying a custom [code]trusted_ssl_certificate[/code] is not supported in HTML5 exports due to browsers restrictions.
</member>
<member name="verify_ssl" type="bool" setter="set_verify_ssl_enabled" getter="is_verify_ssl_enabled">
If [code]true[/code], SSL certificate verification is enabled.
diff --git a/modules/websocket/doc_classes/WebSocketServer.xml b/modules/websocket/doc_classes/WebSocketServer.xml
index 86f2dae64f..2074a10fa9 100644
--- a/modules/websocket/doc_classes/WebSocketServer.xml
+++ b/modules/websocket/doc_classes/WebSocketServer.xml
@@ -6,7 +6,7 @@
<description>
This class implements a WebSocket server that can also support the high-level multiplayer API.
After starting the server ([method listen]), you will need to [method NetworkedMultiplayerPeer.poll] it at regular intervals (e.g. inside [method Node._process]). When clients connect, disconnect, or send data, you will receive the appropriate signal.
- [b]Note:[/b] This class will not work in HTML5 exports due to browser restrictions.
+ [b]Note:[/b] Not available in HTML5 exports.
</description>
<tutorials>
</tutorials>
@@ -83,6 +83,9 @@
</method>
</methods>
<members>
+ <member name="bind_ip" type="String" setter="set_bind_ip" getter="get_bind_ip" default="&quot;*&quot;">
+ When not set to [code]*[/code] will restrict incoming connections to the specified IP address. Setting [code]bind_ip[/code] to [code]127.0.0.1[/code] will cause the server to listen only to the local host.
+ </member>
<member name="ca_chain" type="X509Certificate" setter="set_ca_chain" getter="get_ca_chain">
When using SSL (see [member private_key] and [member ssl_certificate]), you can set this to a valid [X509Certificate] to be provided as additional CA chain information during the SSL handshake.
</member>
diff --git a/modules/websocket/websocket_server.cpp b/modules/websocket/websocket_server.cpp
index ded1850846..76e88d72b9 100644
--- a/modules/websocket/websocket_server.cpp
+++ b/modules/websocket/websocket_server.cpp
@@ -34,6 +34,7 @@ GDCINULL(WebSocketServer);
WebSocketServer::WebSocketServer() {
_peer_id = 1;
+ bind_ip = IP_Address("*");
}
WebSocketServer::~WebSocketServer() {
@@ -49,6 +50,10 @@ void WebSocketServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_peer_port", "id"), &WebSocketServer::get_peer_port);
ClassDB::bind_method(D_METHOD("disconnect_peer", "id", "code", "reason"), &WebSocketServer::disconnect_peer, DEFVAL(1000), DEFVAL(""));
+ ClassDB::bind_method(D_METHOD("get_bind_ip"), &WebSocketServer::get_bind_ip);
+ ClassDB::bind_method(D_METHOD("set_bind_ip"), &WebSocketServer::set_bind_ip);
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "bind_ip"), "set_bind_ip", "get_bind_ip");
+
ClassDB::bind_method(D_METHOD("get_private_key"), &WebSocketServer::get_private_key);
ClassDB::bind_method(D_METHOD("set_private_key"), &WebSocketServer::set_private_key);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "private_key", PROPERTY_HINT_RESOURCE_TYPE, "CryptoKey", 0), "set_private_key", "get_private_key");
@@ -67,6 +72,16 @@ void WebSocketServer::_bind_methods() {
ADD_SIGNAL(MethodInfo("data_received", PropertyInfo(Variant::INT, "id")));
}
+IP_Address WebSocketServer::get_bind_ip() const {
+ return bind_ip;
+}
+
+void WebSocketServer::set_bind_ip(const IP_Address &p_bind_ip) {
+ ERR_FAIL_COND(is_listening());
+ ERR_FAIL_COND(!p_bind_ip.is_valid() && !p_bind_ip.is_wildcard());
+ bind_ip = p_bind_ip;
+}
+
Ref<CryptoKey> WebSocketServer::get_private_key() const {
return private_key;
}
diff --git a/modules/websocket/websocket_server.h b/modules/websocket/websocket_server.h
index bfdac11489..3ce4dbe711 100644
--- a/modules/websocket/websocket_server.h
+++ b/modules/websocket/websocket_server.h
@@ -41,6 +41,8 @@ class WebSocketServer : public WebSocketMultiplayerPeer {
GDCLASS(WebSocketServer, WebSocketMultiplayerPeer);
GDCICLASS(WebSocketServer);
+ IP_Address bind_ip;
+
protected:
static void _bind_methods();
@@ -67,6 +69,9 @@ public:
void _on_disconnect(int32_t p_peer_id, bool p_was_clean);
void _on_close_request(int32_t p_peer_id, int p_code, String p_reason);
+ IP_Address get_bind_ip() const;
+ void set_bind_ip(const IP_Address &p_bind_ip);
+
Ref<CryptoKey> get_private_key() const;
void set_private_key(Ref<CryptoKey> p_key);
diff --git a/modules/websocket/wsl_server.cpp b/modules/websocket/wsl_server.cpp
index c98c62cce9..c3dd79a89c 100644
--- a/modules/websocket/wsl_server.cpp
+++ b/modules/websocket/wsl_server.cpp
@@ -165,7 +165,7 @@ Error WSLServer::listen(int p_port, const Vector<String> p_protocols, bool gd_mp
for (int i = 0; i < p_protocols.size(); i++) {
pw[i] = p_protocols[i].strip_edges();
}
- _server->listen(p_port);
+ _server->listen(p_port, bind_ip);
return OK;
}
diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp
index 8f784dd943..0ebd97d428 100644
--- a/platform/android/export/export.cpp
+++ b/platform/android/export/export.cpp
@@ -30,6 +30,7 @@
#include "export.h"
+#include "core/io/image_loader.h"
#include "core/io/marshalls.h"
#include "core/io/zip_io.h"
#include "core/os/dir_access.h"
@@ -37,6 +38,7 @@
#include "core/os/os.h"
#include "core/project_settings.h"
#include "core/version.h"
+#include "drivers/png/png_driver_common.h"
#include "editor/editor_export.h"
#include "editor/editor_log.h"
#include "editor/editor_node.h"
@@ -196,16 +198,40 @@ static const char *android_perms[] = {
};
struct LauncherIcon {
- const char *option_id;
const char *export_path;
+ int dimensions;
};
-static const LauncherIcon launcher_icons[] = {
- { "launcher_icons/xxxhdpi_192x192", "res/drawable-xxxhdpi-v4/icon.png" },
- { "launcher_icons/xxhdpi_144x144", "res/drawable-xxhdpi-v4/icon.png" },
- { "launcher_icons/xhdpi_96x96", "res/drawable-xhdpi-v4/icon.png" },
- { "launcher_icons/hdpi_72x72", "res/drawable-hdpi-v4/icon.png" },
- { "launcher_icons/mdpi_48x48", "res/drawable-mdpi-v4/icon.png" }
+static const int icon_densities_count = 6;
+static const char *launcher_icon_option = "launcher_icons/main_192x192";
+static const char *launcher_adaptive_icon_foreground_option = "launcher_icons/adaptive_foreground_432x432";
+static const char *launcher_adaptive_icon_background_option = "launcher_icons/adaptive_background_432x432";
+
+static const LauncherIcon launcher_icons[icon_densities_count] = {
+ { "res/mipmap-xxxhdpi-v4/icon.png", 192 },
+ { "res/mipmap-xxhdpi-v4/icon.png", 144 },
+ { "res/mipmap-xhdpi-v4/icon.png", 96 },
+ { "res/mipmap-hdpi-v4/icon.png", 72 },
+ { "res/mipmap-mdpi-v4/icon.png", 48 },
+ { "res/mipmap/icon.png", 192 }
+};
+
+static const LauncherIcon launcher_adaptive_icon_foregrounds[icon_densities_count] = {
+ { "res/mipmap-xxxhdpi-v4/icon_foreground.png", 432 },
+ { "res/mipmap-xxhdpi-v4/icon_foreground.png", 324 },
+ { "res/mipmap-xhdpi-v4/icon_foreground.png", 216 },
+ { "res/mipmap-hdpi-v4/icon_foreground.png", 162 },
+ { "res/mipmap-mdpi-v4/icon_foreground.png", 108 },
+ { "res/mipmap/icon_foreground.png", 432 }
+};
+
+static const LauncherIcon launcher_adaptive_icon_backgrounds[icon_densities_count] = {
+ { "res/mipmap-xxxhdpi-v4/icon_background.png", 432 },
+ { "res/mipmap-xxhdpi-v4/icon_background.png", 324 },
+ { "res/mipmap-xhdpi-v4/icon_background.png", 216 },
+ { "res/mipmap-hdpi-v4/icon_background.png", 162 },
+ { "res/mipmap-mdpi-v4/icon_background.png", 108 },
+ { "res/mipmap/icon_background.png", 432 }
};
class EditorExportPlatformAndroid : public EditorExportPlatform {
@@ -1298,6 +1324,27 @@ class EditorExportPlatformAndroid : public EditorExportPlatform {
//printf("end\n");
}
+ void _process_launcher_icons(const String &p_processing_file_name, const Ref<Image> &p_source_image, const LauncherIcon p_icon, Vector<uint8_t> &p_data) {
+ if (p_processing_file_name == p_icon.export_path) {
+ Ref<Image> working_image = p_source_image;
+
+ if (p_source_image->get_width() != p_icon.dimensions || p_source_image->get_height() != p_icon.dimensions) {
+ working_image = p_source_image->duplicate();
+ working_image->resize(p_icon.dimensions, p_icon.dimensions, Image::Interpolation::INTERPOLATE_LANCZOS);
+ }
+
+ PoolVector<uint8_t> png_buffer;
+ Error err = PNGDriverCommon::image_to_png(working_image, png_buffer);
+ if (err == OK) {
+ p_data.resize(png_buffer.size());
+ memcpy(p_data.ptrw(), png_buffer.read().ptr(), p_data.size());
+ } else {
+ String err_str = String("Failed to convert resized icon (") + p_processing_file_name + ") to png.";
+ WARN_PRINT(err_str.utf8().get_data());
+ }
+ }
+ }
+
static Vector<String> get_enabled_abis(const Ref<EditorExportPreset> &p_preset) {
Vector<String> abis = get_abis();
Vector<String> enabled_abis;
@@ -1355,11 +1402,9 @@ public:
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_large"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_xlarge"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/opengl_debug"), false));
-
- for (uint64_t i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
- r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_icons[i].option_id, PROPERTY_HINT_FILE, "*.png"), ""));
- }
-
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_icon_option, PROPERTY_HINT_FILE, "*.png"), ""));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_foreground_option, PROPERTY_HINT_FILE, "*.png"), ""));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_background_option, PROPERTY_HINT_FILE, "*.png"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/debug", PROPERTY_HINT_GLOBAL_FILE, "*.keystore"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/debug_user"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "keystore/debug_password"), ""));
@@ -1957,7 +2002,7 @@ public:
}
} else if (l.strip_edges().begins_with("<application")) {
- String last_tag = "android:icon=\"@drawable/icon\"";
+ String last_tag = "android:icon=\"@mipmap/icon\"";
int last_tag_pos = l.find(last_tag);
if (last_tag_pos == -1) {
ERR_PRINTS("Not adding application attributes as the expected tag was not found in '<application': " + last_tag);
@@ -2136,6 +2181,35 @@ public:
Vector<String> enabled_abis = get_enabled_abis(p_preset);
+ String project_icon_path = ProjectSettings::get_singleton()->get("application/config/icon");
+
+ // Prepare images to be resized for the icons. If some image ends up being uninitialized, the default image from the export template will be used.
+ Ref<Image> launcher_icon_image;
+ Ref<Image> launcher_adaptive_icon_foreground_image;
+ Ref<Image> launcher_adaptive_icon_background_image;
+
+ launcher_icon_image.instance();
+ launcher_adaptive_icon_foreground_image.instance();
+ launcher_adaptive_icon_background_image.instance();
+
+ // Regular icon: user selection -> project icon -> default.
+ String path = static_cast<String>(p_preset->get(launcher_icon_option)).strip_edges();
+ if (path.empty() || ImageLoader::load_image(path, launcher_icon_image) != OK) {
+ ImageLoader::load_image(project_icon_path, launcher_icon_image);
+ }
+
+ // Adaptive foreground: user selection -> regular icon (user selection -> project icon -> default).
+ path = static_cast<String>(p_preset->get(launcher_adaptive_icon_foreground_option)).strip_edges();
+ if (path.empty() || ImageLoader::load_image(path, launcher_adaptive_icon_foreground_image) != OK) {
+ launcher_adaptive_icon_foreground_image = launcher_icon_image;
+ }
+
+ // Adaptive background: user selection -> default.
+ path = static_cast<String>(p_preset->get(launcher_adaptive_icon_background_option)).strip_edges();
+ if (!path.empty()) {
+ ImageLoader::load_image(path, launcher_adaptive_icon_background_image);
+ }
+
while (ret == UNZ_OK) {
//get filename
@@ -2158,41 +2232,22 @@ public:
//write
if (file == "AndroidManifest.xml") {
-
_fix_manifest(p_preset, data, p_flags & (DEBUG_FLAG_DUMB_CLIENT | DEBUG_FLAG_REMOTE_DEBUG));
}
if (file == "resources.arsc") {
-
_fix_resources(p_preset, data);
}
- if (file == "res/drawable-nodpi-v4/icon.png") {
- bool found = false;
- for (uint64_t i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
- String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges();
- if (icon_path != "" && icon_path.ends_with(".png")) {
- FileAccess *f = FileAccess::open(icon_path, FileAccess::READ);
- if (f) {
- data.resize(f->get_len());
- f->get_buffer(data.ptrw(), data.size());
- memdelete(f);
- found = true;
- break;
- }
- }
+ for (int i = 0; i < icon_densities_count; ++i) {
+ if (launcher_icon_image.is_valid() && !launcher_icon_image->empty()) {
+ _process_launcher_icons(file, launcher_icon_image, launcher_icons[i], data);
}
- if (!found) {
-
- String appicon = ProjectSettings::get_singleton()->get("application/config/icon");
- if (appicon != "" && appicon.ends_with(".png")) {
- FileAccess *f = FileAccess::open(appicon, FileAccess::READ);
- if (f) {
- data.resize(f->get_len());
- f->get_buffer(data.ptrw(), data.size());
- memdelete(f);
- }
- }
+ if (launcher_adaptive_icon_foreground_image.is_valid() && !launcher_adaptive_icon_foreground_image->empty()) {
+ _process_launcher_icons(file, launcher_adaptive_icon_foreground_image, launcher_adaptive_icon_foregrounds[i], data);
+ }
+ if (launcher_adaptive_icon_background_image.is_valid() && !launcher_adaptive_icon_background_image->empty()) {
+ _process_launcher_icons(file, launcher_adaptive_icon_background_image, launcher_adaptive_icon_backgrounds[i], data);
}
}
@@ -2291,19 +2346,6 @@ public:
}
}
- if (!err) {
- APKExportData ed;
- ed.ep = &ep;
- ed.apk = unaligned_apk;
- for (uint64_t i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) {
- String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges();
- if (icon_path != "" && icon_path.ends_with(".png") && FileAccess::exists(icon_path)) {
- Vector<uint8_t> data = FileAccess::get_file_as_array(icon_path);
- store_in_apk(&ed, launcher_icons[i].export_path, data);
- }
- }
- }
-
int xr_mode_index = p_preset->get("xr_features/xr_mode");
if (xr_mode_index == 1 /* XRMode.OVR */) {
cl.push_back("--xr_mode_ovr");
diff --git a/platform/android/java/app/AndroidManifest.xml b/platform/android/java/app/AndroidManifest.xml
index ba01ec313b..7e9ce70d80 100644
--- a/platform/android/java/app/AndroidManifest.xml
+++ b/platform/android/java/app/AndroidManifest.xml
@@ -27,7 +27,7 @@
<!-- Any tag in this line after android:icon will be erased when doing custom builds. -->
<!-- If you want to add tags manually, do before it. -->
<!-- WARNING: This should stay on a single line until the parsing code is improved. See GH-32414. -->
- <application android:label="@string/godot_project_name_string" android:allowBackup="false" tools:ignore="GoogleAppIndexingWarning" android:icon="@drawable/icon" >
+ <application android:label="@string/godot_project_name_string" android:allowBackup="false" tools:ignore="GoogleAppIndexingWarning" android:icon="@mipmap/icon" >
<!-- The following metadata values are replaced when Godot exports, modifying them here has no effect. -->
<!-- Do these changes in the export preset. Adding new ones is fine. -->
diff --git a/platform/android/java/lib/AndroidManifest.xml b/platform/android/java/lib/AndroidManifest.xml
index 517fc403b2..b133585f99 100644
--- a/platform/android/java/lib/AndroidManifest.xml
+++ b/platform/android/java/lib/AndroidManifest.xml
@@ -11,7 +11,7 @@
</application>
<instrumentation
- android:icon="@drawable/icon"
+ android:icon="@mipmap/icon"
android:label="@string/godot_project_name_string"
android:name=".GodotInstrumentation"
android:targetPackage="org.godotengine.godot" />
diff --git a/platform/android/java/lib/res/drawable-nodpi/icon.png b/platform/android/java/lib/res/drawable-nodpi/icon.png
deleted file mode 100644
index 6ad9b43117..0000000000
--- a/platform/android/java/lib/res/drawable-nodpi/icon.png
+++ /dev/null
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-anydpi-v26/icon.xml b/platform/android/java/lib/res/mipmap-anydpi-v26/icon.xml
new file mode 100644
index 0000000000..1ed4037035
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-anydpi-v26/icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@mipmap/icon_background"/>
+ <foreground android:drawable="@mipmap/icon_foreground"/>
+</adaptive-icon> \ No newline at end of file
diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon.png b/platform/android/java/lib/res/mipmap-hdpi/icon.png
new file mode 100644
index 0000000000..cc6e113e89
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-hdpi/icon.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon_background.png b/platform/android/java/lib/res/mipmap-hdpi/icon_background.png
new file mode 100644
index 0000000000..78445c0181
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-hdpi/icon_background.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-hdpi/icon_foreground.png
new file mode 100644
index 0000000000..75e409ff74
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-hdpi/icon_foreground.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon.png b/platform/android/java/lib/res/mipmap-mdpi/icon.png
new file mode 100644
index 0000000000..e1968fe142
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-mdpi/icon.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon_background.png b/platform/android/java/lib/res/mipmap-mdpi/icon_background.png
new file mode 100644
index 0000000000..5813f751ed
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-mdpi/icon_background.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-mdpi/icon_foreground.png
new file mode 100644
index 0000000000..982b69be1e
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-mdpi/icon_foreground.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon.png b/platform/android/java/lib/res/mipmap-xhdpi/icon.png
new file mode 100644
index 0000000000..9281d8da48
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xhdpi/icon.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon_background.png b/platform/android/java/lib/res/mipmap-xhdpi/icon_background.png
new file mode 100644
index 0000000000..4269c822a7
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xhdpi/icon_background.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.png
new file mode 100644
index 0000000000..726b267ad6
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon.png b/platform/android/java/lib/res/mipmap-xxhdpi/icon.png
new file mode 100644
index 0000000000..7a6b67d273
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xxhdpi/icon.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon_background.png b/platform/android/java/lib/res/mipmap-xxhdpi/icon_background.png
new file mode 100644
index 0000000000..5e8b518d17
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xxhdpi/icon_background.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.png
new file mode 100644
index 0000000000..b0c727f74c
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon.png b/platform/android/java/lib/res/mipmap-xxxhdpi/icon.png
new file mode 100644
index 0000000000..0881245802
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xxxhdpi/icon.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.png b/platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.png
new file mode 100644
index 0000000000..004b6fd508
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.png
new file mode 100644
index 0000000000..72e6f92b6e
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap/icon.png b/platform/android/java/lib/res/mipmap/icon.png
new file mode 100644
index 0000000000..0881245802
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap/icon.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap/icon_background.png b/platform/android/java/lib/res/mipmap/icon_background.png
new file mode 100644
index 0000000000..5813f751ed
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap/icon_background.png
Binary files differ
diff --git a/platform/android/java/lib/res/mipmap/icon_foreground.png b/platform/android/java/lib/res/mipmap/icon_foreground.png
new file mode 100644
index 0000000000..982b69be1e
--- /dev/null
+++ b/platform/android/java/lib/res/mipmap/icon_foreground.png
Binary files differ
diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java
index 0ff37e3c37..e0b46673ba 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java
@@ -102,7 +102,7 @@ public class GodotLib {
/**
* Forward double_tap events from the main thread to the GL thread.
*/
- public static native void double_tap(int x, int y);
+ public static native void doubletap(int x, int y);
/**
* Forward scroll events from the main thread to the GL thread.
diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java
index b42b13894c..1a38a9c3d2 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java
@@ -78,7 +78,7 @@ public class GodotGestureHandler extends GestureDetector.SimpleOnGestureListener
queueEvent(new Runnable() {
@Override
public void run() {
- GodotLib.double_tap(x, y);
+ GodotLib.doubletap(x, y);
}
});
return true;
diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp
index d3bc216608..858ff89cbc 100644
--- a/platform/android/java_godot_lib_jni.cpp
+++ b/platform/android/java_godot_lib_jni.cpp
@@ -835,7 +835,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_hover(JNIEnv *env, jo
os_android->process_hover(p_type, Point2(p_x, p_y));
}
-JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_double_tap(JNIEnv *env, jobject obj, jint p_x, jint p_y) {
+JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_doubletap(JNIEnv *env, jobject obj, jint p_x, jint p_y) {
if (step == 0)
return;
diff --git a/platform/android/java_godot_lib_jni.h b/platform/android/java_godot_lib_jni.h
index 08029c3c30..71d4547f65 100644
--- a/platform/android/java_godot_lib_jni.h
+++ b/platform/android/java_godot_lib_jni.h
@@ -46,7 +46,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, job
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jobject obj);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv *env, jobject obj, jint ev, jint pointer, jint count, jintArray positions);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_hover(JNIEnv *env, jobject obj, jint p_type, jint p_x, jint p_y);
-JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_double_tap(JNIEnv *env, jobject obj, jint p_x, jint p_y);
+JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_doubletap(JNIEnv *env, jobject obj, jint p_x, jint p_y);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_scroll(JNIEnv *env, jobject obj, jint p_x, jint p_y);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jobject obj, jint p_scancode, jint p_unicode_char, jboolean p_pressed);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env, jobject obj, jint p_device, jint p_button, jboolean p_pressed);
diff --git a/platform/haiku/detect.py b/platform/haiku/detect.py
index 2a3e165069..dd72294816 100644
--- a/platform/haiku/detect.py
+++ b/platform/haiku/detect.py
@@ -95,7 +95,7 @@ def configure(env):
if not env['builtin_enet']:
env.ParseConfig('pkg-config libenet --cflags --libs')
- if not env['builtin_squish'] and env['tools']:
+ if not env['builtin_squish']:
env.ParseConfig('pkg-config libsquish --cflags --libs')
if not env['builtin_zstd']:
diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp
index 7b1d0e6db1..3e5ab7b886 100644
--- a/platform/iphone/os_iphone.cpp
+++ b/platform/iphone/os_iphone.cpp
@@ -356,14 +356,32 @@ void OSIPhone::delete_main_loop() {
void OSIPhone::finalize() {
- if (main_loop) // should not happen?
- memdelete(main_loop);
+ delete_main_loop();
+
+ memdelete(input);
+ memdelete(ios);
+
+#ifdef GAME_CENTER_ENABLED
+ memdelete(game_center);
+#endif
+
+#ifdef STOREKIT_ENABLED
+ memdelete(store_kit);
+#endif
+
+#ifdef ICLOUD_ENABLED
+ memdelete(icloud);
+#endif
visual_server->finish();
memdelete(visual_server);
// memdelete(rasterizer);
- memdelete(input);
+ // Free unhandled events before close
+ for (int i = 0; i < MAX_EVENTS; i++) {
+ event_queue[i].unref();
+ };
+ event_count = 0;
};
void OSIPhone::set_mouse_show(bool p_show){};
diff --git a/platform/javascript/export/export.cpp b/platform/javascript/export/export.cpp
index 93c83f4ff4..9b93d4f140 100644
--- a/platform/javascript/export/export.cpp
+++ b/platform/javascript/export/export.cpp
@@ -87,16 +87,22 @@ public:
String filepath = EditorSettings::get_singleton()->get_cache_dir().plus_file("tmp_js_export");
String basereq = "/tmp_js_export";
+ String ctype = "";
if (req[1] == basereq + ".html") {
filepath += ".html";
+ ctype = "text/html";
} else if (req[1] == basereq + ".js") {
filepath += ".js";
+ ctype = "application/javascript";
} else if (req[1] == basereq + ".pck") {
filepath += ".pck";
+ ctype = "application/octet-stream";
} else if (req[1] == basereq + ".png") {
filepath += ".png";
+ ctype = "image/png";
} else if (req[1] == basereq + ".wasm") {
filepath += ".wasm";
+ ctype = "application/wasm";
} else {
String s = "HTTP/1.1 404 Not Found\r\n";
s += "Connection: Close\r\n";
@@ -109,10 +115,14 @@ public:
ERR_FAIL_COND(!f);
String s = "HTTP/1.1 200 OK\r\n";
s += "Connection: Close\r\n";
+ s += "Content-Type: " + ctype + "\r\n";
s += "\r\n";
CharString cs = s.utf8();
Error err = connection->put_data((const uint8_t *)cs.get_data(), cs.size() - 1);
- ERR_FAIL_COND(err != OK);
+ if (err != OK) {
+ memdelete(f);
+ ERR_FAIL();
+ }
while (true) {
uint8_t bytes[4096];
@@ -121,8 +131,12 @@ public:
break;
}
err = connection->put_data(bytes, read);
- ERR_FAIL_COND(err != OK);
+ if (err != OK) {
+ memdelete(f);
+ ERR_FAIL();
+ }
}
+ memdelete(f);
}
void poll() {
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index 5562b059f4..632a7df9e8 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -49,6 +49,7 @@
#define DOM_BUTTON_RIGHT 2
#define DOM_BUTTON_XBUTTON1 3
#define DOM_BUTTON_XBUTTON2 4
+#define GODOT_CANVAS_SELECTOR "#canvas"
// Window (canvas)
@@ -70,18 +71,23 @@ static bool is_canvas_focused() {
/* clang-format on */
}
-static Point2 correct_canvas_position(int x, int y) {
+static Point2 compute_position_in_canvas(int x, int y) {
+ int canvas_x = EM_ASM_INT({
+ return document.getElementById('canvas').getBoundingClientRect().x;
+ });
+ int canvas_y = EM_ASM_INT({
+ return document.getElementById('canvas').getBoundingClientRect().y;
+ });
int canvas_width;
int canvas_height;
- emscripten_get_canvas_element_size(NULL, &canvas_width, &canvas_height);
+ emscripten_get_canvas_element_size(GODOT_CANVAS_SELECTOR, &canvas_width, &canvas_height);
double element_width;
double element_height;
- emscripten_get_element_css_size(NULL, &element_width, &element_height);
+ emscripten_get_element_css_size(GODOT_CANVAS_SELECTOR, &element_width, &element_height);
- x = (int)(canvas_width / element_width * x);
- y = (int)(canvas_height / element_height * y);
- return Point2(x, y);
+ return Point2((int)(canvas_width / element_width * (x - canvas_x)),
+ (int)(canvas_height / element_height * (y - canvas_y)));
}
static bool cursor_inside_canvas = true;
@@ -135,14 +141,14 @@ void OS_JavaScript::set_window_size(const Size2 p_size) {
emscripten_exit_soft_fullscreen();
window_maximized = false;
}
- emscripten_set_canvas_element_size(NULL, p_size.x, p_size.y);
+ emscripten_set_canvas_element_size(GODOT_CANVAS_SELECTOR, p_size.x, p_size.y);
}
}
Size2 OS_JavaScript::get_window_size() const {
int canvas[2];
- emscripten_get_canvas_element_size(NULL, canvas, canvas + 1);
+ emscripten_get_canvas_element_size(GODOT_CANVAS_SELECTOR, canvas, canvas + 1);
return Size2(canvas[0], canvas[1]);
}
@@ -162,7 +168,7 @@ void OS_JavaScript::set_window_maximized(bool p_enabled) {
strategy.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF;
strategy.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
strategy.canvasResizedCallback = NULL;
- emscripten_enter_soft_fullscreen(NULL, &strategy);
+ emscripten_enter_soft_fullscreen(GODOT_CANVAS_SELECTOR, &strategy);
window_maximized = p_enabled;
}
}
@@ -191,7 +197,7 @@ void OS_JavaScript::set_window_fullscreen(bool p_enabled) {
strategy.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF;
strategy.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
strategy.canvasResizedCallback = NULL;
- EMSCRIPTEN_RESULT result = emscripten_request_fullscreen_strategy(NULL, false, &strategy);
+ EMSCRIPTEN_RESULT result = emscripten_request_fullscreen_strategy(GODOT_CANVAS_SELECTOR, false, &strategy);
ERR_FAIL_COND_MSG(result == EMSCRIPTEN_RESULT_FAILED_NOT_DEFERRED, "Enabling fullscreen is only possible from an input callback for the HTML5 platform.");
ERR_FAIL_COND_MSG(result != EMSCRIPTEN_RESULT_SUCCESS, "Enabling fullscreen is only possible from an input callback for the HTML5 platform.");
// Not fullscreen yet, so prevent "windowed" canvas dimensions from
@@ -298,9 +304,10 @@ EM_BOOL OS_JavaScript::mouse_button_callback(int p_event_type, const EmscriptenM
Ref<InputEventMouseButton> ev;
ev.instance();
ev->set_pressed(p_event_type == EMSCRIPTEN_EVENT_MOUSEDOWN);
- ev->set_position(correct_canvas_position(p_event->canvasX, p_event->canvasY));
+ ev->set_position(compute_position_in_canvas(p_event->clientX, p_event->clientY));
ev->set_global_position(ev->get_position());
dom2godot_mod(p_event, ev);
+
switch (p_event->button) {
case DOM_BUTTON_LEFT: ev->set_button_index(BUTTON_LEFT); break;
case DOM_BUTTON_MIDDLE: ev->set_button_index(BUTTON_MIDDLE); break;
@@ -312,7 +319,7 @@ EM_BOOL OS_JavaScript::mouse_button_callback(int p_event_type, const EmscriptenM
if (ev->is_pressed()) {
- uint64_t diff = p_event->timestamp - os->last_click_ms;
+ double diff = emscripten_get_now() - os->last_click_ms;
if (ev->get_button_index() == os->last_click_button_index) {
@@ -362,7 +369,7 @@ EM_BOOL OS_JavaScript::mousemove_callback(int p_event_type, const EmscriptenMous
OS_JavaScript *os = get_singleton();
int input_mask = os->input->get_mouse_button_mask();
- Point2 pos = correct_canvas_position(p_event->canvasX, p_event->canvasY);
+ Point2 pos = compute_position_in_canvas(p_event->clientX, p_event->clientY);
// For motion outside the canvas, only read mouse movement if dragging
// started inside the canvas; imitating desktop app behaviour.
if (!cursor_inside_canvas && !input_mask)
@@ -696,7 +703,7 @@ EM_BOOL OS_JavaScript::touch_press_callback(int p_event_type, const EmscriptenTo
if (!touch.isChanged)
continue;
ev->set_index(touch.identifier);
- ev->set_position(correct_canvas_position(touch.canvasX, touch.canvasY));
+ ev->set_position(compute_position_in_canvas(touch.clientX, touch.clientY));
os->touches[i] = ev->get_position();
ev->set_pressed(p_event_type == EMSCRIPTEN_EVENT_TOUCHSTART);
@@ -721,7 +728,7 @@ EM_BOOL OS_JavaScript::touchmove_callback(int p_event_type, const EmscriptenTouc
if (!touch.isChanged)
continue;
ev->set_index(touch.identifier);
- ev->set_position(correct_canvas_position(touch.canvasX, touch.canvasY));
+ ev->set_position(compute_position_in_canvas(touch.clientX, touch.clientY));
Point2 &prev = os->touches[i];
ev->set_relative(ev->get_position() - prev);
prev = ev->get_position();
@@ -920,7 +927,7 @@ Error OS_JavaScript::initialize(const VideoMode &p_desired, int p_video_driver,
}
}
- EMSCRIPTEN_WEBGL_CONTEXT_HANDLE ctx = emscripten_webgl_create_context(NULL, &attributes);
+ EMSCRIPTEN_WEBGL_CONTEXT_HANDLE ctx = emscripten_webgl_create_context(GODOT_CANVAS_SELECTOR, &attributes);
if (emscripten_webgl_make_context_current(ctx) != EMSCRIPTEN_RESULT_SUCCESS) {
gl_initialization_error = true;
}
@@ -983,21 +990,21 @@ Error OS_JavaScript::initialize(const VideoMode &p_desired, int p_video_driver,
// These callbacks from Emscripten's html5.h suffice to access most
// JavaScript APIs. For APIs that are not (sufficiently) exposed, EM_ASM
// is used below.
- SET_EM_CALLBACK("#window", mousemove, mousemove_callback)
- SET_EM_CALLBACK("#canvas", mousedown, mouse_button_callback)
- SET_EM_CALLBACK("#window", mouseup, mouse_button_callback)
- SET_EM_CALLBACK("#window", wheel, wheel_callback)
- SET_EM_CALLBACK("#window", touchstart, touch_press_callback)
- SET_EM_CALLBACK("#window", touchmove, touchmove_callback)
- SET_EM_CALLBACK("#window", touchend, touch_press_callback)
- SET_EM_CALLBACK("#window", touchcancel, touch_press_callback)
- SET_EM_CALLBACK("#canvas", keydown, keydown_callback)
- SET_EM_CALLBACK("#canvas", keypress, keypress_callback)
- SET_EM_CALLBACK("#canvas", keyup, keyup_callback)
- SET_EM_CALLBACK(NULL, fullscreenchange, fullscreen_change_callback)
+ SET_EM_CALLBACK(EMSCRIPTEN_EVENT_TARGET_WINDOW, mousemove, mousemove_callback)
+ SET_EM_CALLBACK(GODOT_CANVAS_SELECTOR, mousedown, mouse_button_callback)
+ SET_EM_CALLBACK(EMSCRIPTEN_EVENT_TARGET_WINDOW, mouseup, mouse_button_callback)
+ SET_EM_CALLBACK(EMSCRIPTEN_EVENT_TARGET_WINDOW, wheel, wheel_callback)
+ SET_EM_CALLBACK(EMSCRIPTEN_EVENT_TARGET_WINDOW, touchstart, touch_press_callback)
+ SET_EM_CALLBACK(EMSCRIPTEN_EVENT_TARGET_WINDOW, touchmove, touchmove_callback)
+ SET_EM_CALLBACK(EMSCRIPTEN_EVENT_TARGET_WINDOW, touchend, touch_press_callback)
+ SET_EM_CALLBACK(EMSCRIPTEN_EVENT_TARGET_WINDOW, touchcancel, touch_press_callback)
+ SET_EM_CALLBACK(GODOT_CANVAS_SELECTOR, keydown, keydown_callback)
+ SET_EM_CALLBACK(GODOT_CANVAS_SELECTOR, keypress, keypress_callback)
+ SET_EM_CALLBACK(GODOT_CANVAS_SELECTOR, keyup, keyup_callback)
+ SET_EM_CALLBACK(EMSCRIPTEN_EVENT_TARGET_DOCUMENT, fullscreenchange, fullscreen_change_callback)
SET_EM_CALLBACK_NOTARGET(gamepadconnected, gamepad_change_callback)
SET_EM_CALLBACK_NOTARGET(gamepaddisconnected, gamepad_change_callback)
-#undef SET_EM_CALLBACK_NODATA
+#undef SET_EM_CALLBACK_NOTARGET
#undef SET_EM_CALLBACK
#undef EM_CHECK
@@ -1078,15 +1085,15 @@ bool OS_JavaScript::main_loop_iterate() {
strategy.canvasResolutionScaleMode = EMSCRIPTEN_FULLSCREEN_CANVAS_SCALE_STDDEF;
strategy.filteringMode = EMSCRIPTEN_FULLSCREEN_FILTERING_DEFAULT;
strategy.canvasResizedCallback = NULL;
- emscripten_enter_soft_fullscreen(NULL, &strategy);
+ emscripten_enter_soft_fullscreen(GODOT_CANVAS_SELECTOR, &strategy);
} else {
- emscripten_set_canvas_element_size(NULL, windowed_size.width, windowed_size.height);
+ emscripten_set_canvas_element_size(GODOT_CANVAS_SELECTOR, windowed_size.width, windowed_size.height);
}
just_exited_fullscreen = false;
}
int canvas[2];
- emscripten_get_canvas_element_size(NULL, canvas, canvas + 1);
+ emscripten_get_canvas_element_size(GODOT_CANVAS_SELECTOR, canvas, canvas + 1);
video_mode.width = canvas[0];
video_mode.height = canvas[1];
if (!window_maximized && !video_mode.fullscreen && !just_exited_fullscreen && !entering_fullscreen) {
diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h
index a5696f8aae..2d1c765e76 100644
--- a/platform/javascript/os_javascript.h
+++ b/platform/javascript/os_javascript.h
@@ -55,7 +55,7 @@ class OS_JavaScript : public OS_Unix {
Point2 touches[32];
Point2i last_click_pos;
- uint64_t last_click_ms;
+ double last_click_ms;
int last_click_button_index;
MainLoop *main_loop;
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h
index 58a47c102a..190dbcf662 100644
--- a/platform/osx/os_osx.h
+++ b/platform/osx/os_osx.h
@@ -76,8 +76,6 @@ public:
List<String> args;
MainLoop *main_loop;
- IP_Unix *ip_unix;
-
#ifdef COREAUDIO_ENABLED
AudioDriverCoreAudio audio_driver;
#endif
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm
index 2b002d3b5d..6a214b8669 100644
--- a/platform/osx/os_osx.mm
+++ b/platform/osx/os_osx.mm
@@ -479,7 +479,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
}
- (NSRange)markedRange {
- return (markedText.length > 0) ? NSMakeRange(0, markedText.length - 1) : kEmptyRange;
+ return NSMakeRange(0, markedText.length);
}
- (NSRange)selectedRange {
@@ -492,6 +492,10 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
} else {
[markedText initWithString:aString];
}
+ if (markedText.length == 0) {
+ [self unmarkText];
+ return;
+ }
if (OS_OSX::singleton->im_active) {
imeInputEventInProgress = true;
OS_OSX::singleton->im_text.parse_utf8([[markedText mutableString] UTF8String]);
diff --git a/platform/server/detect.py b/platform/server/detect.py
index b6028c20e3..d82df77957 100644
--- a/platform/server/detect.py
+++ b/platform/server/detect.py
@@ -162,7 +162,7 @@ def configure(env):
if not env['builtin_enet']:
env.ParseConfig('pkg-config libenet --cflags --libs')
- if not env['builtin_squish'] and env['tools']:
+ if not env['builtin_squish']:
env.ParseConfig('pkg-config libsquish --cflags --libs')
if not env['builtin_zstd']:
diff --git a/platform/server/os_server.h b/platform/server/os_server.h
index 0aca8049f2..46ca9cb6d1 100644
--- a/platform/server/os_server.h
+++ b/platform/server/os_server.h
@@ -58,7 +58,6 @@ class OS_Server : public OS_Unix {
bool grab;
virtual void delete_main_loop();
- IP_Unix *ip_unix;
bool force_quit;
diff --git a/platform/windows/context_gl_windows.cpp b/platform/windows/context_gl_windows.cpp
index 21d954a736..ad62e3a306 100644
--- a/platform/windows/context_gl_windows.cpp
+++ b/platform/windows/context_gl_windows.cpp
@@ -43,6 +43,11 @@
#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126
#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
+#if defined(__GNUC__)
+// Workaround GCC warning from -Wcast-function-type.
+#define wglGetProcAddress (void *)wglGetProcAddress
+#endif
+
typedef HGLRC(APIENTRY *PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC, HGLRC, const int *);
void ContextGL_Windows::release_current() {
@@ -89,7 +94,7 @@ void ContextGL_Windows::swap_buffers() {
if (use_vsync) {
bool vsync_via_compositor_now = should_vsync_via_compositor();
- if (vsync_via_compositor_now) {
+ if (vsync_via_compositor_now && wglGetSwapIntervalEXT() == 0) {
DwmFlush();
}
@@ -205,6 +210,7 @@ Error ContextGL_Windows::initialize() {
}
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
+ wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");
//glWrapperInit(wrapper_get_proc_address);
return OK;
diff --git a/platform/windows/context_gl_windows.h b/platform/windows/context_gl_windows.h
index 0c6a6d1814..280c5a1e3c 100644
--- a/platform/windows/context_gl_windows.h
+++ b/platform/windows/context_gl_windows.h
@@ -41,6 +41,7 @@
#include <windows.h>
typedef bool(APIENTRY *PFNWGLSWAPINTERVALEXTPROC)(int interval);
+typedef int(APIENTRY *PFNWGLGETSWAPINTERVALEXTPROC)(void);
class ContextGL_Windows {
@@ -53,6 +54,7 @@ class ContextGL_Windows {
bool vsync_via_compositor;
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
+ PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT;
static bool should_vsync_via_compositor();
diff --git a/platform/windows/joypad_windows.cpp b/platform/windows/joypad_windows.cpp
index c82a90bf7d..49432435b9 100644
--- a/platform/windows/joypad_windows.cpp
+++ b/platform/windows/joypad_windows.cpp
@@ -37,6 +37,11 @@
#define __builtin_bswap32 _byteswap_ulong
#endif
+#if defined(__GNUC__)
+// Workaround GCC warning from -Wcast-function-type.
+#define GetProcAddress (void *)GetProcAddress
+#endif
+
DWORD WINAPI _xinput_get_state(DWORD dwUserIndex, XINPUT_STATE *pState) {
return ERROR_DEVICE_NOT_CONNECTED;
}
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 3868d0bc63..a6977a7a86 100755
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -74,6 +74,11 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
#define WM_POINTERUPDATE 0x0245
#endif
+#if defined(__GNUC__)
+// Workaround GCC warning from -Wcast-function-type.
+#define GetProcAddress (void *)GetProcAddress
+#endif
+
typedef struct {
int count;
int screen;
diff --git a/platform/x11/detect.py b/platform/x11/detect.py
index b8ff97279d..957779ee83 100644
--- a/platform/x11/detect.py
+++ b/platform/x11/detect.py
@@ -171,7 +171,7 @@ def configure(env):
else:
env.Append(CCFLAGS=['-flto'])
env.Append(LINKFLAGS=['-flto'])
-
+
if not env['use_llvm']:
env['RANLIB'] = 'gcc-ranlib'
env['AR'] = 'gcc-ar'
@@ -232,7 +232,7 @@ def configure(env):
if not env['builtin_enet']:
env.ParseConfig('pkg-config libenet --cflags --libs')
- if not env['builtin_squish'] and env['tools']:
+ if not env['builtin_squish']:
env.ParseConfig('pkg-config libsquish --cflags --libs')
if not env['builtin_zstd']:
@@ -329,9 +329,15 @@ def configure(env):
if env["execinfo"]:
env.Append(LIBS=['execinfo'])
-
+
if not env['tools']:
- env.Append(LINKFLAGS=['-T', 'platform/x11/pck_embed.ld'])
+ import subprocess
+ import re
+ binutils_version = re.search('\s(\d+\.\d+)', str(subprocess.check_output(['ld', '-v']))).group(1)
+ if float(binutils_version) >= 2.30:
+ env.Append(LINKFLAGS=['-T', 'platform/x11/pck_embed.ld'])
+ else:
+ env.Append(LINKFLAGS=['-T', 'platform/x11/pck_embed.legacy.ld'])
## Cross-compilation
diff --git a/platform/x11/pck_embed.ld b/platform/x11/pck_embed.ld
index fe09144d88..57a1994043 100644
--- a/platform/x11/pck_embed.ld
+++ b/platform/x11/pck_embed.ld
@@ -1,9 +1,9 @@
SECTIONS
{
/* Add a zero-sized section; the exporter will patch it to enclose the data appended to the executable (embedded PCK) */
- pck 0 (NOLOAD) :
+ pck 0 (INFO) :
{
- /* Just some content to avoid the linker discarding the section */
+ /* binutils >= 2.30 allow it being zero-sized, but needs something between the braces to keep the section */
. = ALIGN(8);
}
}
diff --git a/platform/x11/pck_embed.legacy.ld b/platform/x11/pck_embed.legacy.ld
new file mode 100644
index 0000000000..a23013ba7a
--- /dev/null
+++ b/platform/x11/pck_embed.legacy.ld
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ /* The exporter will patch this section to enclose the data appended to the executable (embedded PCK) */
+ pck 0 (INFO) : AT ( ADDR (.rodata) + SIZEOF (.rodata) )
+ {
+ /* binutils < 2.30 need some actual content for the linker not to discard the section */
+ BYTE(0);
+ }
+}
+INSERT AFTER .rodata;
diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp
index 8296f35739..c325de00b8 100644
--- a/scene/2d/cpu_particles_2d.cpp
+++ b/scene/2d/cpu_particles_2d.cpp
@@ -422,7 +422,7 @@ bool CPUParticles2D::get_particle_flag(Flags p_flag) const {
}
void CPUParticles2D::set_emission_shape(EmissionShape p_shape) {
-
+ ERR_FAIL_INDEX(p_shape, EMISSION_SHAPE_MAX);
emission_shape = p_shape;
_change_notify();
}
@@ -772,6 +772,9 @@ void CPUParticles2D::_particles_process(float p_delta) {
p.base_color = emission_colors.get(random_idx);
}
} break;
+ case EMISSION_SHAPE_MAX: { // Max value for validity check.
+ break;
+ }
}
if (!local_coords) {
@@ -1416,6 +1419,7 @@ void CPUParticles2D::_bind_methods() {
BIND_ENUM_CONSTANT(EMISSION_SHAPE_RECTANGLE);
BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINTS);
BIND_ENUM_CONSTANT(EMISSION_SHAPE_DIRECTED_POINTS);
+ BIND_ENUM_CONSTANT(EMISSION_SHAPE_MAX);
}
CPUParticles2D::CPUParticles2D() {
diff --git a/scene/2d/cpu_particles_2d.h b/scene/2d/cpu_particles_2d.h
index 6ffa1f0e97..cbaff70c2a 100644
--- a/scene/2d/cpu_particles_2d.h
+++ b/scene/2d/cpu_particles_2d.h
@@ -75,6 +75,7 @@ public:
EMISSION_SHAPE_RECTANGLE,
EMISSION_SHAPE_POINTS,
EMISSION_SHAPE_DIRECTED_POINTS,
+ EMISSION_SHAPE_MAX
};
private:
diff --git a/scene/2d/light_2d.cpp b/scene/2d/light_2d.cpp
index eb66265010..1bffaf8084 100644
--- a/scene/2d/light_2d.cpp
+++ b/scene/2d/light_2d.cpp
@@ -189,6 +189,10 @@ float Light2D::get_energy() const {
void Light2D::set_texture_scale(float p_scale) {
_scale = p_scale;
+ // Avoid having 0 scale values, can lead to errors in physics and rendering.
+ if (_scale == 0) {
+ _scale = CMP_EPSILON;
+ }
VS::get_singleton()->canvas_light_set_scale(canvas_light, _scale);
item_rect_changed();
}
diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp
index 7bbc7577ed..7deebe9b27 100644
--- a/scene/2d/node_2d.cpp
+++ b/scene/2d/node_2d.cpp
@@ -173,6 +173,7 @@ void Node2D::set_scale(const Size2 &p_scale) {
if (_xform_dirty)
((Node2D *)this)->_update_xform_values();
_scale = p_scale;
+ // Avoid having 0 scale values, can lead to errors in physics and rendering.
if (_scale.x == 0)
_scale.x = CMP_EPSILON;
if (_scale.y == 0)
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp
index 90663bd675..d42bd6adaf 100644
--- a/scene/2d/physics_body_2d.cpp
+++ b/scene/2d/physics_body_2d.cpp
@@ -1234,7 +1234,7 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const
on_ceiling = false;
on_wall = false;
colliders.clear();
- floor_normal = p_up_direction;
+ floor_normal = Vector2();
floor_velocity = Vector2();
while (p_max_slides) {
@@ -1473,8 +1473,8 @@ void KinematicBody2D::_notification(int p_what) {
void KinematicBody2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("move_and_collide", "rel_vec", "infinite_inertia", "exclude_raycast_shapes", "test_only"), &KinematicBody2D::_move, DEFVAL(true), DEFVAL(true), DEFVAL(false));
- ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "floor_normal", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody2D::move_and_slide, DEFVAL(Vector2(0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true));
- ClassDB::bind_method(D_METHOD("move_and_slide_with_snap", "linear_velocity", "snap", "floor_normal", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody2D::move_and_slide_with_snap, DEFVAL(Vector2(0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "up_direction", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody2D::move_and_slide, DEFVAL(Vector2(0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("move_and_slide_with_snap", "linear_velocity", "snap", "up_direction", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody2D::move_and_slide_with_snap, DEFVAL(Vector2(0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true));
ClassDB::bind_method(D_METHOD("test_move", "from", "rel_vec", "infinite_inertia"), &KinematicBody2D::test_move, DEFVAL(true));
diff --git a/scene/3d/cpu_particles.cpp b/scene/3d/cpu_particles.cpp
index 0ac424b09e..aa7a413548 100644
--- a/scene/3d/cpu_particles.cpp
+++ b/scene/3d/cpu_particles.cpp
@@ -405,7 +405,7 @@ bool CPUParticles::get_particle_flag(Flags p_flag) const {
}
void CPUParticles::set_emission_shape(EmissionShape p_shape) {
-
+ ERR_FAIL_INDEX(p_shape, EMISSION_SHAPE_MAX);
emission_shape = p_shape;
}
@@ -784,6 +784,9 @@ void CPUParticles::_particles_process(float p_delta) {
p.base_color = emission_colors.get(random_idx);
}
} break;
+ case EMISSION_SHAPE_MAX: { // Max value for validity check.
+ break;
+ }
}
if (!local_coords) {
@@ -1488,6 +1491,7 @@ void CPUParticles::_bind_methods() {
BIND_ENUM_CONSTANT(EMISSION_SHAPE_BOX);
BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINTS);
BIND_ENUM_CONSTANT(EMISSION_SHAPE_DIRECTED_POINTS);
+ BIND_ENUM_CONSTANT(EMISSION_SHAPE_MAX);
}
CPUParticles::CPUParticles() {
diff --git a/scene/3d/cpu_particles.h b/scene/3d/cpu_particles.h
index 18f9718e70..d5a549b976 100644
--- a/scene/3d/cpu_particles.h
+++ b/scene/3d/cpu_particles.h
@@ -75,6 +75,7 @@ public:
EMISSION_SHAPE_BOX,
EMISSION_SHAPE_POINTS,
EMISSION_SHAPE_DIRECTED_POINTS,
+ EMISSION_SHAPE_MAX
};
private:
diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp
index 999f39c841..caeae90238 100644
--- a/scene/3d/physics_body.cpp
+++ b/scene/3d/physics_body.cpp
@@ -1159,7 +1159,7 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve
on_ceiling = false;
on_wall = false;
colliders.clear();
- floor_normal = p_up_direction;
+ floor_normal = Vector3();
floor_velocity = Vector3();
while (p_max_slides) {
@@ -1401,7 +1401,7 @@ void KinematicBody::_bind_methods() {
ClassDB::bind_method(D_METHOD("move_and_collide", "rel_vec", "infinite_inertia", "exclude_raycast_shapes", "test_only"), &KinematicBody::_move, DEFVAL(true), DEFVAL(true), DEFVAL(false));
ClassDB::bind_method(D_METHOD("move_and_slide", "linear_velocity", "up_direction", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody::move_and_slide, DEFVAL(Vector3(0, 0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true));
- ClassDB::bind_method(D_METHOD("move_and_slide_with_snap", "linear_velocity", "snap", "floor_normal", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody::move_and_slide_with_snap, DEFVAL(Vector3(0, 0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("move_and_slide_with_snap", "linear_velocity", "snap", "up_direction", "stop_on_slope", "max_slides", "floor_max_angle", "infinite_inertia"), &KinematicBody::move_and_slide_with_snap, DEFVAL(Vector3(0, 0, 0)), DEFVAL(false), DEFVAL(4), DEFVAL(Math::deg2rad((float)45)), DEFVAL(true));
ClassDB::bind_method(D_METHOD("test_move", "from", "rel_vec", "infinite_inertia"), &KinematicBody::test_move, DEFVAL(true));
diff --git a/scene/animation/skeleton_ik.cpp b/scene/animation/skeleton_ik.cpp
index 99a266af0d..518c243dd0 100644
--- a/scene/animation/skeleton_ik.cpp
+++ b/scene/animation/skeleton_ik.cpp
@@ -320,7 +320,7 @@ void FabrikInverseKinematic::solve(Task *p_task, real_t blending_delta, bool ove
new_bone_pose.basis = new_bone_pose.basis * p_task->chain.tips[0].end_effector->goal_transform.basis;
}
- p_task->skeleton->set_bone_global_pose_override(ci->bone, new_bone_pose, 1.0);
+ p_task->skeleton->set_bone_global_pose_override(ci->bone, new_bone_pose, 1.0, true);
if (!ci->children.empty())
ci = &ci->children.write[0];
diff --git a/scene/gui/center_container.cpp b/scene/gui/center_container.cpp
index 9f4353ceb6..64d6885bc8 100644
--- a/scene/gui/center_container.cpp
+++ b/scene/gui/center_container.cpp
@@ -54,7 +54,13 @@ Size2 CenterContainer::get_minimum_size() const {
void CenterContainer::set_use_top_left(bool p_enable) {
+ if (use_top_left == p_enable) {
+ return;
+ }
+
use_top_left = p_enable;
+
+ minimum_size_changed();
queue_sort();
}
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 9a67745e0d..4f499af186 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -2682,6 +2682,11 @@ Vector2 Control::get_pivot_offset() const {
void Control::set_scale(const Vector2 &p_scale) {
data.scale = p_scale;
+ // Avoid having 0 scale values, can lead to errors in physics and rendering.
+ if (data.scale.x == 0)
+ data.scale.x = CMP_EPSILON;
+ if (data.scale.y == 0)
+ data.scale.y = CMP_EPSILON;
update();
_notify_transform();
}
diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp
index be465751b6..00ce57eb04 100644
--- a/scene/gui/graph_edit.cpp
+++ b/scene/gui/graph_edit.cpp
@@ -200,6 +200,13 @@ void GraphEdit::_update_scroll() {
else
v_scroll->show();
+ Size2 hmin = h_scroll->get_combined_minimum_size();
+ Size2 vmin = v_scroll->get_combined_minimum_size();
+
+ // Avoid scrollbar overlapping.
+ h_scroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, v_scroll->is_visible() ? -vmin.width : 0);
+ v_scroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, h_scroll->is_visible() ? -hmin.height : 0);
+
set_block_minimum_size_adjust(false);
if (!awaiting_scroll_offset_update) {
@@ -286,15 +293,15 @@ void GraphEdit::_notification(int p_what) {
Size2 hmin = h_scroll->get_combined_minimum_size();
Size2 vmin = v_scroll->get_combined_minimum_size();
- v_scroll->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -vmin.width);
- v_scroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 0);
- v_scroll->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 0);
- v_scroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, 0);
-
h_scroll->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_BEGIN, 0);
h_scroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 0);
h_scroll->set_anchor_and_margin(MARGIN_TOP, ANCHOR_END, -hmin.height);
h_scroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, 0);
+
+ v_scroll->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -vmin.width);
+ v_scroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 0);
+ v_scroll->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 0);
+ v_scroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, 0);
}
if (p_what == NOTIFICATION_DRAW) {
@@ -1352,6 +1359,7 @@ GraphEdit::GraphEdit() {
v_scroll = memnew(VScrollBar);
v_scroll->set_name("_v_scroll");
top_layer->add_child(v_scroll);
+
updating = false;
connecting = false;
right_disconnects = false;
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index 2a812caf9a..526950dbb3 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -993,7 +993,7 @@ void ItemList::_notification(int p_what) {
}
//ensure_selected_visible needs to be checked before we draw the list.
- if (ensure_selected_visible && current >= 0 && current <= items.size()) {
+ if (ensure_selected_visible && current >= 0 && current < items.size()) {
Rect2 r = items[current].rect_cache;
int from = scroll_bar->get_value();
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index a6cd9a0665..0f3328dac5 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -1239,6 +1239,11 @@ void LineEdit::set_text(String p_text) {
clear_internal();
append_at_cursor(p_text);
+
+ if (expand_to_text_length) {
+ minimum_size_changed();
+ }
+
update();
cursor_pos = 0;
window_pos = 0;
@@ -1482,6 +1487,7 @@ void LineEdit::set_editable(bool p_editable) {
editable = p_editable;
_generate_context_menu();
+ minimum_size_changed();
update();
}
@@ -1617,7 +1623,11 @@ bool LineEdit::get_expand_to_text_length() const {
}
void LineEdit::set_clear_button_enabled(bool p_enabled) {
+ if (clear_button_enabled == p_enabled) {
+ return;
+ }
clear_button_enabled = p_enabled;
+ minimum_size_changed();
update();
}
@@ -1653,6 +1663,7 @@ void LineEdit::set_right_icon(const Ref<Texture> &p_icon) {
return;
}
right_icon = p_icon;
+ minimum_size_changed();
update();
}
diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp
index dc1183df74..509e6d19f6 100644
--- a/scene/gui/scroll_container.cpp
+++ b/scene/gui/scroll_container.cpp
@@ -219,16 +219,16 @@ void ScrollContainer::_update_scrollbar_position() {
Size2 hmin = h_scroll->get_combined_minimum_size();
Size2 vmin = v_scroll->get_combined_minimum_size();
- v_scroll->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -vmin.width);
- v_scroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 0);
- v_scroll->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 0);
- v_scroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, 0);
-
h_scroll->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_BEGIN, 0);
h_scroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 0);
h_scroll->set_anchor_and_margin(MARGIN_TOP, ANCHOR_END, -hmin.height);
h_scroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, 0);
+ v_scroll->set_anchor_and_margin(MARGIN_LEFT, ANCHOR_END, -vmin.width);
+ v_scroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, 0);
+ v_scroll->set_anchor_and_margin(MARGIN_TOP, ANCHOR_BEGIN, 0);
+ v_scroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, 0);
+
h_scroll->raise();
v_scroll->raise();
}
@@ -317,6 +317,7 @@ void ScrollContainer::_notification(int p_what) {
r.position += ofs;
fit_child_in_rect(c, r);
}
+
update();
};
@@ -408,13 +409,17 @@ void ScrollContainer::update_scrollbars() {
Size2 hmin;
Size2 vmin;
- if (scroll_h) hmin = h_scroll->get_combined_minimum_size();
- if (scroll_v) vmin = v_scroll->get_combined_minimum_size();
+ if (scroll_h) {
+ hmin = h_scroll->get_combined_minimum_size();
+ }
+ if (scroll_v) {
+ vmin = v_scroll->get_combined_minimum_size();
+ }
Size2 min = child_max_size;
- bool hide_scroll_v = !scroll_v || min.height <= size.height - hmin.height;
- bool hide_scroll_h = !scroll_h || min.width <= size.width - vmin.width;
+ bool hide_scroll_v = !scroll_v || min.height <= size.height;
+ bool hide_scroll_h = !scroll_h || min.width <= size.width;
if (hide_scroll_v) {
@@ -449,6 +454,10 @@ void ScrollContainer::update_scrollbars() {
scroll.x = h_scroll->get_value();
}
+
+ // Avoid scrollbar overlapping.
+ h_scroll->set_anchor_and_margin(MARGIN_RIGHT, ANCHOR_END, hide_scroll_v ? 0 : -vmin.width);
+ v_scroll->set_anchor_and_margin(MARGIN_BOTTOM, ANCHOR_END, hide_scroll_h ? 0 : -hmin.height);
}
void ScrollContainer::_scroll_moved(float) {
@@ -461,8 +470,12 @@ void ScrollContainer::_scroll_moved(float) {
};
void ScrollContainer::set_enable_h_scroll(bool p_enable) {
+ if (scroll_h == p_enable) {
+ return;
+ }
scroll_h = p_enable;
+ minimum_size_changed();
queue_sort();
}
@@ -472,8 +485,12 @@ bool ScrollContainer::is_h_scroll_enabled() const {
}
void ScrollContainer::set_enable_v_scroll(bool p_enable) {
+ if (scroll_v == p_enable) {
+ return;
+ }
scroll_v = p_enable;
+ minimum_size_changed();
queue_sort();
}
@@ -593,12 +610,11 @@ ScrollContainer::ScrollContainer() {
h_scroll = memnew(HScrollBar);
h_scroll->set_name("_h_scroll");
add_child(h_scroll);
+ h_scroll->connect("value_changed", this, "_scroll_moved");
v_scroll = memnew(VScrollBar);
v_scroll->set_name("_v_scroll");
add_child(v_scroll);
-
- h_scroll->connect("value_changed", this, "_scroll_moved");
v_scroll->connect("value_changed", this, "_scroll_moved");
drag_speed = Vector2();
diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp
index da147e7112..7c43d8fb14 100644
--- a/scene/main/scene_tree.cpp
+++ b/scene/main/scene_tree.cpp
@@ -423,7 +423,8 @@ void SceneTree::input_event(const Ref<InputEvent> &p_event) {
input_handled = false;
- const Ref<InputEvent> &ev = p_event;
+ // Don't make const ref unless you can find and fix what caused GH-34691.
+ Ref<InputEvent> ev = p_event;
MainLoop::input_event(ev);
diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp
index 10d871aa92..8b619345d6 100644
--- a/scene/resources/dynamic_font.cpp
+++ b/scene/resources/dynamic_font.cpp
@@ -314,7 +314,7 @@ float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2 &p_pos, CharT
float advance = 0.0;
- // use normal character size if there's no outline charater
+ // use normal character size if there's no outline character
if (p_outline && !ch->found) {
FT_GlyphSlot slot = face->glyph;
int error = FT_Load_Char(face, p_char, FT_HAS_COLOR(face) ? FT_LOAD_COLOR : FT_LOAD_DEFAULT);
diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp
index a058f42cb2..412b5c259c 100644
--- a/scene/resources/particles_material.cpp
+++ b/scene/resources/particles_material.cpp
@@ -198,6 +198,9 @@ void ParticlesMaterial::_update_shader() {
code += "uniform sampler2D emission_texture_color : hint_white;\n";
}
} break;
+ case EMISSION_SHAPE_MAX: { // Max value for validity check.
+ break;
+ }
}
code += "uniform vec4 color_value : hint_color;\n";
@@ -283,7 +286,7 @@ void ParticlesMaterial::_update_shader() {
code += " float degree_to_rad = pi / 180.0;\n";
code += "\n";
- if (emission_shape >= EMISSION_SHAPE_POINTS) {
+ if (emission_shape == EMISSION_SHAPE_POINTS || emission_shape == EMISSION_SHAPE_DIRECTED_POINTS) {
code += " int point = min(emission_texture_point_count - 1, int(rand_from_seed(alt_seed) * float(emission_texture_point_count)));\n";
code += " ivec2 emission_tex_size = textureSize(emission_texture_points, 0);\n";
code += " ivec2 emission_tex_ofs = ivec2(point % emission_tex_size.x, point / emission_tex_size.x);\n";
@@ -368,6 +371,9 @@ void ParticlesMaterial::_update_shader() {
}
}
} break;
+ case EMISSION_SHAPE_MAX: { // Max value for validity check.
+ break;
+ }
}
code += " VELOCITY = (EMISSION_TRANSFORM * vec4(VELOCITY, 0.0)).xyz;\n";
code += " TRANSFORM = EMISSION_TRANSFORM * TRANSFORM;\n";
@@ -515,7 +521,7 @@ void ParticlesMaterial::_update_shader() {
} else {
code += " COLOR = hue_rot_mat * color_value;\n";
}
- if (emission_color_texture.is_valid() && emission_shape >= EMISSION_SHAPE_POINTS) {
+ if (emission_color_texture.is_valid() && (emission_shape == EMISSION_SHAPE_POINTS || emission_shape == EMISSION_SHAPE_DIRECTED_POINTS)) {
code += " COLOR *= texelFetch(emission_texture_color, emission_tex_ofs, 0);\n";
}
if (trail_color_modifier.is_valid()) {
@@ -894,7 +900,7 @@ bool ParticlesMaterial::get_flag(Flags p_flag) const {
}
void ParticlesMaterial::set_emission_shape(EmissionShape p_shape) {
-
+ ERR_FAIL_INDEX(p_shape, EMISSION_SHAPE_MAX);
emission_shape = p_shape;
_change_notify();
_queue_shader_change();
@@ -1242,6 +1248,7 @@ void ParticlesMaterial::_bind_methods() {
BIND_ENUM_CONSTANT(EMISSION_SHAPE_BOX);
BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINTS);
BIND_ENUM_CONSTANT(EMISSION_SHAPE_DIRECTED_POINTS);
+ BIND_ENUM_CONSTANT(EMISSION_SHAPE_MAX);
}
ParticlesMaterial::ParticlesMaterial() :
diff --git a/scene/resources/particles_material.h b/scene/resources/particles_material.h
index 643c2cb10e..cc860b3812 100644
--- a/scene/resources/particles_material.h
+++ b/scene/resources/particles_material.h
@@ -69,6 +69,7 @@ public:
EMISSION_SHAPE_BOX,
EMISSION_SHAPE_POINTS,
EMISSION_SHAPE_DIRECTED_POINTS,
+ EMISSION_SHAPE_MAX
};
private:
diff --git a/servers/physics/area_sw.cpp b/servers/physics/area_sw.cpp
index f9f7f67a1e..398849edb8 100644
--- a/servers/physics/area_sw.cpp
+++ b/servers/physics/area_sw.cpp
@@ -46,6 +46,9 @@ AreaSW::BodyKey::BodyKey(AreaSW *p_body, uint32_t p_body_shape, uint32_t p_area_
}
void AreaSW::_shapes_changed() {
+
+ if (!moved_list.in_list() && get_space())
+ get_space()->area_add_to_moved_list(&moved_list);
}
void AreaSW::set_transform(const Transform &p_transform) {
diff --git a/servers/physics_2d/area_2d_sw.cpp b/servers/physics_2d/area_2d_sw.cpp
index 110e94d22e..6f09041af8 100644
--- a/servers/physics_2d/area_2d_sw.cpp
+++ b/servers/physics_2d/area_2d_sw.cpp
@@ -46,6 +46,9 @@ Area2DSW::BodyKey::BodyKey(Area2DSW *p_body, uint32_t p_body_shape, uint32_t p_a
}
void Area2DSW::_shapes_changed() {
+
+ if (!moved_list.in_list() && get_space())
+ get_space()->area_add_to_moved_list(&moved_list);
}
void Area2DSW::set_transform(const Transform2D &p_transform) {
diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp
index 225b382524..3e0a28ac1d 100644
--- a/servers/visual/shader_language.cpp
+++ b/servers/visual/shader_language.cpp
@@ -2060,7 +2060,7 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = {
//sub-functions
//array
- { "length", TYPE_INT, { TYPE_VOID }, TAG_ARRAY, false },
+ { "length", TYPE_INT, { TYPE_VOID }, TAG_ARRAY, true },
{ NULL, TYPE_VOID, { TYPE_VOID }, TAG_GLOBAL, false }
@@ -3888,6 +3888,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui
if (tk.type == TK_BRACKET_OPEN) {
bool unknown_size = false;
+ if (VisualServer::get_singleton()->is_low_end() && is_const) {
+ _set_error("Local const arrays are supported only on high-end platform!");
+ return ERR_PARSE_ERROR;
+ }
+
ArrayDeclarationNode *node = alloc_node<ArrayDeclarationNode>();
node->datatype = type;
node->precision = precision;
@@ -3923,6 +3928,12 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui
tk = _get_token();
if (tk.type == TK_OP_ASSIGN) {
+
+ if (VisualServer::get_singleton()->is_low_end()) {
+ _set_error("Array initialization is supported only on high-end platform!");
+ return ERR_PARSE_ERROR;
+ }
+
tk = _get_token();
if (tk.type != TK_CURLY_BRACKET_OPEN) {
@@ -3953,33 +3964,42 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui
tk = _get_token();
if (tk.type == TK_BRACKET_OPEN) {
- Node *n = _parse_and_reduce_expression(p_block, p_builtin_types);
- if (!n || n->type != Node::TYPE_CONSTANT || n->get_datatype() != TYPE_INT) {
- _set_error("Expected single integer constant > 0");
- return ERR_PARSE_ERROR;
- }
+ TkPos pos2 = _get_tkpos();
+ tk = _get_token();
+ if (tk.type == TK_BRACKET_CLOSE) {
+ array_size2 = var.array_size;
+ tk = _get_token();
+ } else {
+ _set_tkpos(pos2);
- ConstantNode *cnode = (ConstantNode *)n;
- if (cnode->values.size() == 1) {
- array_size2 = cnode->values[0].sint;
- if (array_size2 <= 0) {
+ Node *n = _parse_and_reduce_expression(p_block, p_builtin_types);
+ if (!n || n->type != Node::TYPE_CONSTANT || n->get_datatype() != TYPE_INT) {
+ _set_error("Expected single integer constant > 0");
+ return ERR_PARSE_ERROR;
+ }
+
+ ConstantNode *cnode = (ConstantNode *)n;
+ if (cnode->values.size() == 1) {
+ array_size2 = cnode->values[0].sint;
+ if (array_size2 <= 0) {
+ _set_error("Expected single integer constant > 0");
+ return ERR_PARSE_ERROR;
+ }
+ } else {
_set_error("Expected single integer constant > 0");
return ERR_PARSE_ERROR;
}
- } else {
- _set_error("Expected single integer constant > 0");
- return ERR_PARSE_ERROR;
- }
- tk = _get_token();
- if (tk.type != TK_BRACKET_CLOSE) {
- _set_error("Expected ']");
- return ERR_PARSE_ERROR;
- } else {
tk = _get_token();
+ if (tk.type != TK_BRACKET_CLOSE) {
+ _set_error("Expected ']'");
+ return ERR_PARSE_ERROR;
+ } else {
+ tk = _get_token();
+ }
}
} else {
- _set_error("Expected '[");
+ _set_error("Expected '['");
return ERR_PARSE_ERROR;
}
diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h
index 9535c7f50d..b8f433d006 100644
--- a/servers/visual/visual_server_wrap_mt.h
+++ b/servers/visual/visual_server_wrap_mt.h
@@ -101,7 +101,7 @@ public:
FUNC2(texture_set_path, RID, const String &)
FUNC1RC(String, texture_get_path, RID)
FUNC1(texture_set_shrink_all_x2_on_set_data, bool)
- FUNC1(texture_debug_usage, List<TextureInfo> *)
+ FUNC1S(texture_debug_usage, List<TextureInfo> *)
FUNC1(textures_keep_original, bool)
diff --git a/servers/visual_server.h b/servers/visual_server.h
index 33a9e8d72b..6f0659357c 100644
--- a/servers/visual_server.h
+++ b/servers/visual_server.h
@@ -335,12 +335,14 @@ public:
MULTIMESH_COLOR_NONE,
MULTIMESH_COLOR_8BIT,
MULTIMESH_COLOR_FLOAT,
+ MULTIMESH_COLOR_MAX,
};
enum MultimeshCustomDataFormat {
MULTIMESH_CUSTOM_DATA_NONE,
MULTIMESH_CUSTOM_DATA_8BIT,
MULTIMESH_CUSTOM_DATA_FLOAT,
+ MULTIMESH_CUSTOM_DATA_MAX,
};
virtual void multimesh_allocate(RID p_multimesh, int p_instances, MultimeshTransformFormat p_transform_format, MultimeshColorFormat p_color_format, MultimeshCustomDataFormat p_data_format = MULTIMESH_CUSTOM_DATA_NONE) = 0;
diff --git a/thirdparty/README.md b/thirdparty/README.md
index b68c585cac..b29f4bd5e8 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -237,7 +237,7 @@ from the Android NDK r18.
## libwebp
- Upstream: https://chromium.googlesource.com/webm/libwebp/
-- Version: 1.0.3
+- Version: 1.1.0
- License: BSD-3-Clause
Files extracted from upstream source:
diff --git a/thirdparty/libwebp/src/dec/frame_dec.c b/thirdparty/libwebp/src/dec/frame_dec.c
index bda9e1a6f6..04609a8e56 100644
--- a/thirdparty/libwebp/src/dec/frame_dec.c
+++ b/thirdparty/libwebp/src/dec/frame_dec.c
@@ -732,7 +732,7 @@ static int AllocateMemory(VP8Decoder* const dec) {
mem += f_info_size;
dec->thread_ctx_.id_ = 0;
dec->thread_ctx_.f_info_ = dec->f_info_;
- if (dec->mt_method_ > 0) {
+ if (dec->filter_type_ > 0 && dec->mt_method_ > 0) {
// secondary cache line. The deblocking process need to make use of the
// filtering strength from previous macroblock row, while the new ones
// are being decoded in parallel. We'll just swap the pointers.
diff --git a/thirdparty/libwebp/src/dec/idec_dec.c b/thirdparty/libwebp/src/dec/idec_dec.c
index 9bc9166808..9035df5659 100644
--- a/thirdparty/libwebp/src/dec/idec_dec.c
+++ b/thirdparty/libwebp/src/dec/idec_dec.c
@@ -166,9 +166,11 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,
VP8Decoder* const dec = (VP8Decoder*)idec->dec_;
MemBuffer* const mem = &idec->mem_;
const int need_compressed_alpha = NeedCompressedAlpha(idec);
- const uint8_t* const old_start = mem->buf_ + mem->start_;
+ const uint8_t* const old_start =
+ (mem->buf_ == NULL) ? NULL : mem->buf_ + mem->start_;
const uint8_t* const old_base =
need_compressed_alpha ? dec->alpha_data_ : old_start;
+ assert(mem->buf_ != NULL || mem->start_ == 0);
assert(mem->mode_ == MEM_MODE_APPEND);
if (data_size > MAX_CHUNK_PAYLOAD) {
// security safeguard: trying to allocate more than what the format
@@ -184,7 +186,7 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,
uint8_t* const new_buf =
(uint8_t*)WebPSafeMalloc(extra_size, sizeof(*new_buf));
if (new_buf == NULL) return 0;
- memcpy(new_buf, old_base, current_size);
+ if (old_base != NULL) memcpy(new_buf, old_base, current_size);
WebPSafeFree(mem->buf_);
mem->buf_ = new_buf;
mem->buf_size_ = (size_t)extra_size;
@@ -192,6 +194,7 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,
mem->end_ = current_size;
}
+ assert(mem->buf_ != NULL);
memcpy(mem->buf_ + mem->end_, data, data_size);
mem->end_ += data_size;
assert(mem->end_ <= mem->buf_size_);
@@ -204,7 +207,9 @@ static int RemapMemBuffer(WebPIDecoder* const idec,
const uint8_t* const data, size_t data_size) {
MemBuffer* const mem = &idec->mem_;
const uint8_t* const old_buf = mem->buf_;
- const uint8_t* const old_start = old_buf + mem->start_;
+ const uint8_t* const old_start =
+ (old_buf == NULL) ? NULL : old_buf + mem->start_;
+ assert(old_buf != NULL || mem->start_ == 0);
assert(mem->mode_ == MEM_MODE_MAP);
if (data_size < mem->buf_size_) return 0; // can't remap to a shorter buffer!
diff --git a/thirdparty/libwebp/src/dec/vp8i_dec.h b/thirdparty/libwebp/src/dec/vp8i_dec.h
index 3de8d86f90..600a684410 100644
--- a/thirdparty/libwebp/src/dec/vp8i_dec.h
+++ b/thirdparty/libwebp/src/dec/vp8i_dec.h
@@ -31,8 +31,8 @@ extern "C" {
// version numbers
#define DEC_MAJ_VERSION 1
-#define DEC_MIN_VERSION 0
-#define DEC_REV_VERSION 3
+#define DEC_MIN_VERSION 1
+#define DEC_REV_VERSION 0
// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline).
// Constraints are: We need to store one 16x16 block of luma samples (y),
diff --git a/thirdparty/libwebp/src/dec/vp8l_dec.c b/thirdparty/libwebp/src/dec/vp8l_dec.c
index d3e27119ea..93615d4ed2 100644
--- a/thirdparty/libwebp/src/dec/vp8l_dec.c
+++ b/thirdparty/libwebp/src/dec/vp8l_dec.c
@@ -754,11 +754,11 @@ static WEBP_INLINE HTreeGroup* GetHtreeGroupForPos(VP8LMetadata* const hdr,
typedef void (*ProcessRowsFunc)(VP8LDecoder* const dec, int row);
-static void ApplyInverseTransforms(VP8LDecoder* const dec, int num_rows,
+static void ApplyInverseTransforms(VP8LDecoder* const dec,
+ int start_row, int num_rows,
const uint32_t* const rows) {
int n = dec->next_transform_;
const int cache_pixs = dec->width_ * num_rows;
- const int start_row = dec->last_row_;
const int end_row = start_row + num_rows;
const uint32_t* rows_in = rows;
uint32_t* const rows_out = dec->argb_cache_;
@@ -789,8 +789,7 @@ static void ProcessRows(VP8LDecoder* const dec, int row) {
VP8Io* const io = dec->io_;
uint8_t* rows_data = (uint8_t*)dec->argb_cache_;
const int in_stride = io->width * sizeof(uint32_t); // in unit of RGBA
-
- ApplyInverseTransforms(dec, num_rows, rows);
+ ApplyInverseTransforms(dec, dec->last_row_, num_rows, rows);
if (!SetCropWindow(io, dec->last_row_, row, &rows_data, in_stride)) {
// Nothing to output (this time).
} else {
@@ -1193,6 +1192,7 @@ static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data,
VP8LFillBitWindow(br);
dist_code = GetCopyDistance(dist_symbol, br);
dist = PlaneCodeToDistance(width, dist_code);
+
if (VP8LIsEndOfStream(br)) break;
if (src - data < (ptrdiff_t)dist || src_end - src < (ptrdiff_t)length) {
goto Error;
@@ -1553,7 +1553,7 @@ static void ExtractAlphaRows(VP8LDecoder* const dec, int last_row) {
const int cache_pixs = width * num_rows_to_process;
uint8_t* const dst = output + width * cur_row;
const uint32_t* const src = dec->argb_cache_;
- ApplyInverseTransforms(dec, num_rows_to_process, in);
+ ApplyInverseTransforms(dec, cur_row, num_rows_to_process, in);
WebPExtractGreen(src, dst, cache_pixs);
AlphaApplyFilter(alph_dec,
cur_row, cur_row + num_rows_to_process, dst, width);
diff --git a/thirdparty/libwebp/src/dec/vp8li_dec.h b/thirdparty/libwebp/src/dec/vp8li_dec.h
index 0a4d613f99..72b2e86120 100644
--- a/thirdparty/libwebp/src/dec/vp8li_dec.h
+++ b/thirdparty/libwebp/src/dec/vp8li_dec.h
@@ -37,7 +37,7 @@ struct VP8LTransform {
int bits_; // subsampling bits defining transform window.
int xsize_; // transform window X index.
int ysize_; // transform window Y index.
- uint32_t *data_; // transform data.
+ uint32_t* data_; // transform data.
};
typedef struct {
@@ -48,23 +48,23 @@ typedef struct {
int huffman_mask_;
int huffman_subsample_bits_;
int huffman_xsize_;
- uint32_t *huffman_image_;
+ uint32_t* huffman_image_;
int num_htree_groups_;
- HTreeGroup *htree_groups_;
- HuffmanCode *huffman_tables_;
+ HTreeGroup* htree_groups_;
+ HuffmanCode* huffman_tables_;
} VP8LMetadata;
typedef struct VP8LDecoder VP8LDecoder;
struct VP8LDecoder {
VP8StatusCode status_;
VP8LDecodeState state_;
- VP8Io *io_;
+ VP8Io* io_;
- const WebPDecBuffer *output_; // shortcut to io->opaque->output
+ const WebPDecBuffer* output_; // shortcut to io->opaque->output
- uint32_t *pixels_; // Internal data: either uint8_t* for alpha
+ uint32_t* pixels_; // Internal data: either uint8_t* for alpha
// or uint32_t* for BGRA.
- uint32_t *argb_cache_; // Scratch buffer for temporary BGRA storage.
+ uint32_t* argb_cache_; // Scratch buffer for temporary BGRA storage.
VP8LBitReader br_;
int incremental_; // if true, incremental decoding is expected
@@ -86,8 +86,8 @@ struct VP8LDecoder {
// or'd bitset storing the transforms types.
uint32_t transforms_seen_;
- uint8_t *rescaler_memory; // Working memory for rescaling work.
- WebPRescaler *rescaler; // Common rescaler for all channels.
+ uint8_t* rescaler_memory; // Working memory for rescaling work.
+ WebPRescaler* rescaler; // Common rescaler for all channels.
};
//------------------------------------------------------------------------------
diff --git a/thirdparty/libwebp/src/demux/demux.c b/thirdparty/libwebp/src/demux/demux.c
index ab6433e54b..1b3cc2e0a8 100644
--- a/thirdparty/libwebp/src/demux/demux.c
+++ b/thirdparty/libwebp/src/demux/demux.c
@@ -24,8 +24,8 @@
#include "src/webp/format_constants.h"
#define DMUX_MAJ_VERSION 1
-#define DMUX_MIN_VERSION 0
-#define DMUX_REV_VERSION 3
+#define DMUX_MIN_VERSION 1
+#define DMUX_REV_VERSION 0
typedef struct {
size_t start_; // start location of the data
diff --git a/thirdparty/libwebp/src/dsp/dec_neon.c b/thirdparty/libwebp/src/dsp/dec_neon.c
index ffa697fcf9..239ec4167e 100644
--- a/thirdparty/libwebp/src/dsp/dec_neon.c
+++ b/thirdparty/libwebp/src/dsp/dec_neon.c
@@ -1361,7 +1361,8 @@ static void RD4_NEON(uint8_t* dst) { // Down-right
const uint32_t J = dst[-1 + 1 * BPS];
const uint32_t K = dst[-1 + 2 * BPS];
const uint32_t L = dst[-1 + 3 * BPS];
- const uint64x1_t LKJI____ = vcreate_u64(L | (K << 8) | (J << 16) | (I << 24));
+ const uint64x1_t LKJI____ =
+ vcreate_u64((uint64_t)L | (K << 8) | (J << 16) | (I << 24));
const uint64x1_t LKJIXABC = vorr_u64(LKJI____, ____XABC);
const uint8x8_t KJIXABC_ = vreinterpret_u8_u64(vshr_n_u64(LKJIXABC, 8));
const uint8x8_t JIXABC__ = vreinterpret_u8_u64(vshr_n_u64(LKJIXABC, 16));
@@ -1427,10 +1428,16 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) {
if (do_top) {
const uint8x8_t A = vld1_u8(dst - BPS); // top row
+#if defined(__aarch64__)
+ const uint16x8_t B = vmovl_u8(A);
+ const uint16_t p2 = vaddvq_u16(B);
+ sum_top = vdupq_n_u16(p2);
+#else
const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top
const uint16x4_t p1 = vpadd_u16(p0, p0);
const uint16x4_t p2 = vpadd_u16(p1, p1);
sum_top = vcombine_u16(p2, p2);
+#endif
}
if (do_left) {
diff --git a/thirdparty/libwebp/src/dsp/dsp.h b/thirdparty/libwebp/src/dsp/dsp.h
index fafc2d05d3..a784de334a 100644
--- a/thirdparty/libwebp/src/dsp/dsp.h
+++ b/thirdparty/libwebp/src/dsp/dsp.h
@@ -246,9 +246,9 @@ extern VP8Fdct VP8FTransform2; // performs two transforms at a time
extern VP8WHT VP8FTransformWHT;
// Predictions
// *dst is the destination block. *top and *left can be NULL.
-typedef void (*VP8IntraPreds)(uint8_t *dst, const uint8_t* left,
+typedef void (*VP8IntraPreds)(uint8_t* dst, const uint8_t* left,
const uint8_t* top);
-typedef void (*VP8Intra4Preds)(uint8_t *dst, const uint8_t* top);
+typedef void (*VP8Intra4Preds)(uint8_t* dst, const uint8_t* top);
extern VP8Intra4Preds VP8EncPredLuma4;
extern VP8IntraPreds VP8EncPredLuma16;
extern VP8IntraPreds VP8EncPredChroma8;
diff --git a/thirdparty/libwebp/src/dsp/lossless.c b/thirdparty/libwebp/src/dsp/lossless.c
index d05af84e7b..aad5f43ec9 100644
--- a/thirdparty/libwebp/src/dsp/lossless.c
+++ b/thirdparty/libwebp/src/dsp/lossless.c
@@ -81,7 +81,7 @@ static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1,
// gcc <= 4.9 on ARM generates incorrect code in Select() when Sub3() is
// inlined.
-#if defined(__arm__) && LOCAL_GCC_VERSION <= 0x409
+#if defined(__arm__) && defined(__GNUC__) && LOCAL_GCC_VERSION <= 0x409
# define LOCAL_INLINE __attribute__ ((noinline))
#else
# define LOCAL_INLINE WEBP_INLINE
@@ -167,15 +167,20 @@ static uint32_t Predictor13_C(uint32_t left, const uint32_t* const top) {
return pred;
}
-GENERATE_PREDICTOR_ADD(Predictor0_C, PredictorAdd0_C)
+static void PredictorAdd0_C(const uint32_t* in, const uint32_t* upper,
+ int num_pixels, uint32_t* out) {
+ int x;
+ (void)upper;
+ for (x = 0; x < num_pixels; ++x) out[x] = VP8LAddPixels(in[x], ARGB_BLACK);
+}
static void PredictorAdd1_C(const uint32_t* in, const uint32_t* upper,
int num_pixels, uint32_t* out) {
int i;
uint32_t left = out[-1];
+ (void)upper;
for (i = 0; i < num_pixels; ++i) {
out[i] = left = VP8LAddPixels(in[i], left);
}
- (void)upper;
}
GENERATE_PREDICTOR_ADD(Predictor2_C, PredictorAdd2_C)
GENERATE_PREDICTOR_ADD(Predictor3_C, PredictorAdd3_C)
diff --git a/thirdparty/libwebp/src/dsp/lossless_common.h b/thirdparty/libwebp/src/dsp/lossless_common.h
index a2648d1737..9c2ebe6809 100644
--- a/thirdparty/libwebp/src/dsp/lossless_common.h
+++ b/thirdparty/libwebp/src/dsp/lossless_common.h
@@ -177,6 +177,7 @@ uint32_t VP8LSubPixels(uint32_t a, uint32_t b) {
static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
int num_pixels, uint32_t* out) { \
int x; \
+ assert(upper != NULL); \
for (x = 0; x < num_pixels; ++x) { \
const uint32_t pred = (PREDICTOR)(out[x - 1], upper + x); \
out[x] = VP8LAddPixels(in[x], pred); \
@@ -189,6 +190,7 @@ static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \
int num_pixels, uint32_t* out) { \
int x; \
+ assert(upper != NULL); \
for (x = 0; x < num_pixels; ++x) { \
const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x); \
out[x] = VP8LSubPixels(in[x], pred); \
diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
index 8adc52139b..e676f6fdc9 100644
--- a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
+++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
@@ -455,8 +455,9 @@ static void PredictorSub0_SSE2(const uint32_t* in, const uint32_t* upper,
_mm_storeu_si128((__m128i*)&out[i], res);
}
if (i != num_pixels) {
- VP8LPredictorsSub_C[0](in + i, upper + i, num_pixels - i, out + i);
+ VP8LPredictorsSub_C[0](in + i, NULL, num_pixels - i, out + i);
}
+ (void)upper;
}
#define GENERATE_PREDICTOR_1(X, IN) \
diff --git a/thirdparty/libwebp/src/dsp/lossless_sse2.c b/thirdparty/libwebp/src/dsp/lossless_sse2.c
index 17d7576419..aef0cee1b3 100644
--- a/thirdparty/libwebp/src/dsp/lossless_sse2.c
+++ b/thirdparty/libwebp/src/dsp/lossless_sse2.c
@@ -191,8 +191,9 @@ static void PredictorAdd0_SSE2(const uint32_t* in, const uint32_t* upper,
_mm_storeu_si128((__m128i*)&out[i], res);
}
if (i != num_pixels) {
- VP8LPredictorsAdd_C[0](in + i, upper + i, num_pixels - i, out + i);
+ VP8LPredictorsAdd_C[0](in + i, NULL, num_pixels - i, out + i);
}
+ (void)upper;
}
// Predictor1: left.
diff --git a/thirdparty/libwebp/src/dsp/upsampling_msa.c b/thirdparty/libwebp/src/dsp/upsampling_msa.c
index 99eea70e7d..f2e03e85e9 100644
--- a/thirdparty/libwebp/src/dsp/upsampling_msa.c
+++ b/thirdparty/libwebp/src/dsp/upsampling_msa.c
@@ -576,9 +576,9 @@ static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bot_y, \
const uint32_t l_uv = ((cur_u[0]) | ((cur_v[0]) << 16)); \
const uint32_t uv0 = (3 * tl_uv + l_uv + 0x00020002u) >> 2; \
const uint8_t* ptop_y = &top_y[1]; \
- uint8_t *ptop_dst = top_dst + XSTEP; \
+ uint8_t* ptop_dst = top_dst + XSTEP; \
const uint8_t* pbot_y = &bot_y[1]; \
- uint8_t *pbot_dst = bot_dst + XSTEP; \
+ uint8_t* pbot_dst = bot_dst + XSTEP; \
\
FUNC(top_y[0], uv0 & 0xff, (uv0 >> 16), top_dst); \
if (bot_y != NULL) { \
diff --git a/thirdparty/libwebp/src/dsp/upsampling_neon.c b/thirdparty/libwebp/src/dsp/upsampling_neon.c
index 17cbc9f911..6ba71a7de5 100644
--- a/thirdparty/libwebp/src/dsp/upsampling_neon.c
+++ b/thirdparty/libwebp/src/dsp/upsampling_neon.c
@@ -58,8 +58,8 @@
} while (0)
// Turn the macro into a function for reducing code-size when non-critical
-static void Upsample16Pixels_NEON(const uint8_t *r1, const uint8_t *r2,
- uint8_t *out) {
+static void Upsample16Pixels_NEON(const uint8_t* r1, const uint8_t* r2,
+ uint8_t* out) {
UPSAMPLE_16PIXELS(r1, r2, out);
}
@@ -190,14 +190,14 @@ static const int16_t kCoeffs1[4] = { 19077, 26149, 6419, 13320 };
}
#define NEON_UPSAMPLE_FUNC(FUNC_NAME, FMT, XSTEP) \
-static void FUNC_NAME(const uint8_t *top_y, const uint8_t *bottom_y, \
- const uint8_t *top_u, const uint8_t *top_v, \
- const uint8_t *cur_u, const uint8_t *cur_v, \
- uint8_t *top_dst, uint8_t *bottom_dst, int len) { \
+static void FUNC_NAME(const uint8_t* top_y, const uint8_t* bottom_y, \
+ const uint8_t* top_u, const uint8_t* top_v, \
+ const uint8_t* cur_u, const uint8_t* cur_v, \
+ uint8_t* top_dst, uint8_t* bottom_dst, int len) { \
int block; \
/* 16 byte aligned array to cache reconstructed u and v */ \
uint8_t uv_buf[2 * 32 + 15]; \
- uint8_t *const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15); \
+ uint8_t* const r_uv = (uint8_t*)((uintptr_t)(uv_buf + 15) & ~15); \
const int uv_len = (len + 1) >> 1; \
/* 9 pixels must be read-able for each block */ \
const int num_blocks = (uv_len - 1) >> 3; \
diff --git a/thirdparty/libwebp/src/enc/histogram_enc.c b/thirdparty/libwebp/src/enc/histogram_enc.c
index d89b98524a..a4e6bf3a98 100644
--- a/thirdparty/libwebp/src/enc/histogram_enc.c
+++ b/thirdparty/libwebp/src/enc/histogram_enc.c
@@ -641,7 +641,7 @@ static void HistogramAnalyzeEntropyBin(VP8LHistogramSet* const image_histo,
// Merges some histograms with same bin_id together if it's advantageous.
// Sets the remaining histograms to NULL.
static void HistogramCombineEntropyBin(VP8LHistogramSet* const image_histo,
- int *num_used,
+ int* num_used,
const uint16_t* const clusters,
uint16_t* const cluster_mappings,
VP8LHistogram* cur_combo,
diff --git a/thirdparty/libwebp/src/enc/picture_csp_enc.c b/thirdparty/libwebp/src/enc/picture_csp_enc.c
index 02d9df76d5..718e014ed2 100644
--- a/thirdparty/libwebp/src/enc/picture_csp_enc.c
+++ b/thirdparty/libwebp/src/enc/picture_csp_enc.c
@@ -29,11 +29,15 @@
#define USE_INVERSE_ALPHA_TABLE
#ifdef WORDS_BIGENDIAN
-#define ALPHA_OFFSET 0 // uint32_t 0xff000000 is 0xff,00,00,00 in memory
+// uint32_t 0xff000000 is 0xff,00,00,00 in memory
+#define CHANNEL_OFFSET(i) (i)
#else
-#define ALPHA_OFFSET 3 // uint32_t 0xff000000 is 0x00,00,00,ff in memory
+// uint32_t 0xff000000 is 0x00,00,00,ff in memory
+#define CHANNEL_OFFSET(i) (3-(i))
#endif
+#define ALPHA_OFFSET CHANNEL_OFFSET(0)
+
//------------------------------------------------------------------------------
// Detection of non-trivial transparency
@@ -997,10 +1001,10 @@ static int PictureARGBToYUVA(WebPPicture* picture, WebPEncCSP colorspace,
return WebPEncodingSetError(picture, VP8_ENC_ERROR_INVALID_CONFIGURATION);
} else {
const uint8_t* const argb = (const uint8_t*)picture->argb;
- const uint8_t* const a = argb + (0 ^ ALPHA_OFFSET);
- const uint8_t* const r = argb + (1 ^ ALPHA_OFFSET);
- const uint8_t* const g = argb + (2 ^ ALPHA_OFFSET);
- const uint8_t* const b = argb + (3 ^ ALPHA_OFFSET);
+ const uint8_t* const a = argb + CHANNEL_OFFSET(0);
+ const uint8_t* const r = argb + CHANNEL_OFFSET(1);
+ const uint8_t* const g = argb + CHANNEL_OFFSET(2);
+ const uint8_t* const b = argb + CHANNEL_OFFSET(3);
picture->colorspace = WEBP_YUV420;
return ImportYUVAFromRGBA(r, g, b, a, 4, 4 * picture->argb_stride,
@@ -1050,7 +1054,7 @@ int WebPPictureYUVAToARGB(WebPPicture* picture) {
const int height = picture->height;
const int argb_stride = 4 * picture->argb_stride;
uint8_t* dst = (uint8_t*)picture->argb;
- const uint8_t *cur_u = picture->u, *cur_v = picture->v, *cur_y = picture->y;
+ const uint8_t* cur_u = picture->u, *cur_v = picture->v, *cur_y = picture->y;
WebPUpsampleLinePairFunc upsample =
WebPGetLinePairConverter(ALPHA_OFFSET > 0);
diff --git a/thirdparty/libwebp/src/enc/vp8i_enc.h b/thirdparty/libwebp/src/enc/vp8i_enc.h
index 24e1944610..fedcaeea27 100644
--- a/thirdparty/libwebp/src/enc/vp8i_enc.h
+++ b/thirdparty/libwebp/src/enc/vp8i_enc.h
@@ -31,8 +31,8 @@ extern "C" {
// version numbers
#define ENC_MAJ_VERSION 1
-#define ENC_MIN_VERSION 0
-#define ENC_REV_VERSION 3
+#define ENC_MIN_VERSION 1
+#define ENC_REV_VERSION 0
enum { MAX_LF_LEVELS = 64, // Maximum loop filter level
MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost
@@ -249,7 +249,7 @@ typedef struct {
int percent0_; // saved initial progress percent
DError left_derr_; // left error diffusion (u/v)
- DError *top_derr_; // top diffusion error - NULL if disabled
+ DError* top_derr_; // top diffusion error - NULL if disabled
uint8_t* y_left_; // left luma samples (addressable from index -1 to 15).
uint8_t* u_left_; // left u samples (addressable from index -1 to 7)
diff --git a/thirdparty/libwebp/src/mux/muxi.h b/thirdparty/libwebp/src/mux/muxi.h
index 7bc0b07e9b..ad3e1bdb97 100644
--- a/thirdparty/libwebp/src/mux/muxi.h
+++ b/thirdparty/libwebp/src/mux/muxi.h
@@ -28,8 +28,8 @@ extern "C" {
// Defines and constants.
#define MUX_MAJ_VERSION 1
-#define MUX_MIN_VERSION 0
-#define MUX_REV_VERSION 3
+#define MUX_MIN_VERSION 1
+#define MUX_REV_VERSION 0
// Chunk object.
typedef struct WebPChunk WebPChunk;
diff --git a/thirdparty/libwebp/src/mux/muxread.c b/thirdparty/libwebp/src/mux/muxread.c
index 268f6acb53..ae3b876bc5 100644
--- a/thirdparty/libwebp/src/mux/muxread.c
+++ b/thirdparty/libwebp/src/mux/muxread.c
@@ -100,7 +100,7 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data,
WebPMuxImage* const wpi) {
const uint8_t* bytes = chunk->data_.bytes;
size_t size = chunk->data_.size;
- const uint8_t* const last = bytes + size;
+ const uint8_t* const last = (bytes == NULL) ? NULL : bytes + size;
WebPChunk subchunk;
size_t subchunk_size;
WebPChunk** unknown_chunk_list = &wpi->unknown_;
diff --git a/thirdparty/libwebp/src/utils/color_cache_utils.h b/thirdparty/libwebp/src/utils/color_cache_utils.h
index ec21d5199b..b45d47c2d5 100644
--- a/thirdparty/libwebp/src/utils/color_cache_utils.h
+++ b/thirdparty/libwebp/src/utils/color_cache_utils.h
@@ -26,7 +26,7 @@ extern "C" {
// Main color cache struct.
typedef struct {
- uint32_t *colors_; // color entries
+ uint32_t* colors_; // color entries
int hash_shift_; // Hash shift: 32 - hash_bits_.
int hash_bits_;
} VP8LColorCache;
diff --git a/thirdparty/libwebp/src/utils/thread_utils.c b/thirdparty/libwebp/src/utils/thread_utils.c
index 438296b45f..4e470e17ac 100644
--- a/thirdparty/libwebp/src/utils/thread_utils.c
+++ b/thirdparty/libwebp/src/utils/thread_utils.c
@@ -73,7 +73,7 @@ typedef struct {
#endif
static int pthread_create(pthread_t* const thread, const void* attr,
- unsigned int (__stdcall *start)(void*), void* arg) {
+ unsigned int (__stdcall* start)(void*), void* arg) {
(void)attr;
#ifdef USE_CREATE_THREAD
*thread = CreateThread(NULL, /* lpThreadAttributes */
diff --git a/thirdparty/libwebp/src/utils/utils.c b/thirdparty/libwebp/src/utils/utils.c
index 44d5c14f01..764f752b82 100644
--- a/thirdparty/libwebp/src/utils/utils.c
+++ b/thirdparty/libwebp/src/utils/utils.c
@@ -216,9 +216,14 @@ void WebPSafeFree(void* const ptr) {
free(ptr);
}
-// Public API function.
+// Public API functions.
+
+void* WebPMalloc(size_t size) {
+ return WebPSafeMalloc(1, size);
+}
+
void WebPFree(void* ptr) {
- free(ptr);
+ WebPSafeFree(ptr);
}
//------------------------------------------------------------------------------
diff --git a/thirdparty/libwebp/src/webp/decode.h b/thirdparty/libwebp/src/webp/decode.h
index ae8bfe840e..80dd0ef0cc 100644
--- a/thirdparty/libwebp/src/webp/decode.h
+++ b/thirdparty/libwebp/src/webp/decode.h
@@ -20,7 +20,7 @@
extern "C" {
#endif
-#define WEBP_DECODER_ABI_VERSION 0x0208 // MAJOR(8b) + MINOR(8b)
+#define WEBP_DECODER_ABI_VERSION 0x0209 // MAJOR(8b) + MINOR(8b)
// Note: forward declaring enumerations is not allowed in (strict) C and C++,
// the types are left here for reference.
@@ -91,9 +91,6 @@ WEBP_EXTERN uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size,
uint8_t** u, uint8_t** v,
int* stride, int* uv_stride);
-// Releases memory returned by the WebPDecode*() functions above.
-WEBP_EXTERN void WebPFree(void* ptr);
-
// These five functions are variants of the above ones, that decode the image
// directly into a pre-allocated buffer 'output_buffer'. The maximum storage
// available in this buffer is indicated by 'output_buffer_size'. If this
diff --git a/thirdparty/libwebp/src/webp/encode.h b/thirdparty/libwebp/src/webp/encode.h
index 339f8810aa..655166e7d4 100644
--- a/thirdparty/libwebp/src/webp/encode.h
+++ b/thirdparty/libwebp/src/webp/encode.h
@@ -20,7 +20,7 @@
extern "C" {
#endif
-#define WEBP_ENCODER_ABI_VERSION 0x020e // MAJOR(8b) + MINOR(8b)
+#define WEBP_ENCODER_ABI_VERSION 0x020f // MAJOR(8b) + MINOR(8b)
// Note: forward declaring enumerations is not allowed in (strict) C and C++,
// the types are left here for reference.
@@ -79,9 +79,6 @@ WEBP_EXTERN size_t WebPEncodeLosslessBGRA(const uint8_t* bgra,
int width, int height, int stride,
uint8_t** output);
-// Releases memory returned by the WebPEncode*() functions above.
-WEBP_EXTERN void WebPFree(void* ptr);
-
//------------------------------------------------------------------------------
// Coding parameters
@@ -306,7 +303,7 @@ struct WebPPicture {
// YUV input (mostly used for input to lossy compression)
WebPEncCSP colorspace; // colorspace: should be YUV420 for now (=Y'CbCr).
int width, height; // dimensions (less or equal to WEBP_MAX_DIMENSION)
- uint8_t *y, *u, *v; // pointers to luma/chroma planes.
+ uint8_t* y, *u, *v; // pointers to luma/chroma planes.
int y_stride, uv_stride; // luma/chroma strides.
uint8_t* a; // pointer to the alpha plane
int a_stride; // stride of the alpha plane
@@ -350,7 +347,7 @@ struct WebPPicture {
uint32_t pad3[3]; // padding for later use
// Unused for now
- uint8_t *pad4, *pad5;
+ uint8_t* pad4, *pad5;
uint32_t pad6[8]; // padding for later use
// PRIVATE FIELDS
diff --git a/thirdparty/libwebp/src/webp/mux.h b/thirdparty/libwebp/src/webp/mux.h
index 66096a92e0..7d27489a40 100644
--- a/thirdparty/libwebp/src/webp/mux.h
+++ b/thirdparty/libwebp/src/webp/mux.h
@@ -57,7 +57,7 @@ extern "C" {
WebPMuxGetChunk(mux, "ICCP", &icc_profile);
// ... (Consume icc_data).
WebPMuxDelete(mux);
- free(data);
+ WebPFree(data);
*/
// Note: forward declaring enumerations is not allowed in (strict) C and C++,
@@ -245,7 +245,7 @@ WEBP_EXTERN WebPMuxError WebPMuxPushFrame(
WebPMux* mux, const WebPMuxFrameInfo* frame, int copy_data);
// Gets the nth frame from the mux object.
-// The content of 'frame->bitstream' is allocated using malloc(), and NOT
+// The content of 'frame->bitstream' is allocated using WebPMalloc(), and NOT
// owned by the 'mux' object. It MUST be deallocated by the caller by calling
// WebPDataClear().
// nth=0 has a special meaning - last position.
@@ -376,10 +376,10 @@ WEBP_EXTERN WebPMuxError WebPMuxNumChunks(const WebPMux* mux,
// Assembles all chunks in WebP RIFF format and returns in 'assembled_data'.
// This function also validates the mux object.
// Note: The content of 'assembled_data' will be ignored and overwritten.
-// Also, the content of 'assembled_data' is allocated using malloc(), and NOT
-// owned by the 'mux' object. It MUST be deallocated by the caller by calling
-// WebPDataClear(). It's always safe to call WebPDataClear() upon return,
-// even in case of error.
+// Also, the content of 'assembled_data' is allocated using WebPMalloc(), and
+// NOT owned by the 'mux' object. It MUST be deallocated by the caller by
+// calling WebPDataClear(). It's always safe to call WebPDataClear() upon
+// return, even in case of error.
// Parameters:
// mux - (in/out) object whose chunks are to be assembled
// assembled_data - (out) assembled WebP data
diff --git a/thirdparty/libwebp/src/webp/mux_types.h b/thirdparty/libwebp/src/webp/mux_types.h
index ceea77dfc6..2fe8195839 100644
--- a/thirdparty/libwebp/src/webp/mux_types.h
+++ b/thirdparty/libwebp/src/webp/mux_types.h
@@ -14,7 +14,6 @@
#ifndef WEBP_WEBP_MUX_TYPES_H_
#define WEBP_WEBP_MUX_TYPES_H_
-#include <stdlib.h> // free()
#include <string.h> // memset()
#include "./types.h"
@@ -56,6 +55,7 @@ typedef enum WebPMuxAnimBlend {
// Data type used to describe 'raw' data, e.g., chunk data
// (ICC profile, metadata) and WebP compressed image data.
+// 'bytes' memory must be allocated using WebPMalloc() and such.
struct WebPData {
const uint8_t* bytes;
size_t size;
@@ -68,11 +68,11 @@ static WEBP_INLINE void WebPDataInit(WebPData* webp_data) {
}
}
-// Clears the contents of the 'webp_data' object by calling free(). Does not
-// deallocate the object itself.
+// Clears the contents of the 'webp_data' object by calling WebPFree().
+// Does not deallocate the object itself.
static WEBP_INLINE void WebPDataClear(WebPData* webp_data) {
if (webp_data != NULL) {
- free((void*)webp_data->bytes);
+ WebPFree((void*)webp_data->bytes);
WebPDataInit(webp_data);
}
}
@@ -83,7 +83,7 @@ static WEBP_INLINE int WebPDataCopy(const WebPData* src, WebPData* dst) {
if (src == NULL || dst == NULL) return 0;
WebPDataInit(dst);
if (src->bytes != NULL && src->size != 0) {
- dst->bytes = (uint8_t*)malloc(src->size);
+ dst->bytes = (uint8_t*)WebPMalloc(src->size);
if (dst->bytes == NULL) return 0;
memcpy((void*)dst->bytes, src->bytes, src->size);
dst->size = src->size;
diff --git a/thirdparty/libwebp/src/webp/types.h b/thirdparty/libwebp/src/webp/types.h
index 0ce2622e41..47f7f2b007 100644
--- a/thirdparty/libwebp/src/webp/types.h
+++ b/thirdparty/libwebp/src/webp/types.h
@@ -7,7 +7,7 @@
// be found in the AUTHORS file in the root of the source tree.
// -----------------------------------------------------------------------------
//
-// Common types
+// Common types + memory wrappers
//
// Author: Skal (pascal.massimino@gmail.com)
@@ -49,4 +49,20 @@ typedef long long int int64_t;
// Macro to check ABI compatibility (same major revision number)
#define WEBP_ABI_IS_INCOMPATIBLE(a, b) (((a) >> 8) != ((b) >> 8))
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Allocates 'size' bytes of memory. Returns NULL upon error. Memory
+// must be deallocated by calling WebPFree(). This function is made available
+// by the core 'libwebp' library.
+WEBP_EXTERN void* WebPMalloc(size_t size);
+
+// Releases memory returned by the WebPDecode*() functions (from decode.h).
+WEBP_EXTERN void WebPFree(void* ptr);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
#endif // WEBP_WEBP_TYPES_H_
diff --git a/version.py b/version.py
index 930981f7af..36778ee756 100644
--- a/version.py
+++ b/version.py
@@ -3,7 +3,7 @@ name = "Godot Engine"
major = 3
minor = 2
patch = 0
-status = "beta"
+status = "rc"
module_config = ""
year = 2020
website = "https://godotengine.org"