diff options
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) @@ -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=""""> 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=""res://script_templates""> </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]"<No Stream>"[/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> ¶ms) { + 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=""*""> + 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 Binary files differdeleted file mode 100644 index 6ad9b43117..0000000000 --- a/platform/android/java/lib/res/drawable-nodpi/icon.png +++ /dev/null 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 Binary files differnew file mode 100644 index 0000000000..cc6e113e89 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-hdpi/icon.png diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon_background.png b/platform/android/java/lib/res/mipmap-hdpi/icon_background.png Binary files differnew file mode 100644 index 0000000000..78445c0181 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-hdpi/icon_background.png diff --git a/platform/android/java/lib/res/mipmap-hdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-hdpi/icon_foreground.png Binary files differnew file mode 100644 index 0000000000..75e409ff74 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-hdpi/icon_foreground.png diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon.png b/platform/android/java/lib/res/mipmap-mdpi/icon.png Binary files differnew file mode 100644 index 0000000000..e1968fe142 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-mdpi/icon.png diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon_background.png b/platform/android/java/lib/res/mipmap-mdpi/icon_background.png Binary files differnew file mode 100644 index 0000000000..5813f751ed --- /dev/null +++ b/platform/android/java/lib/res/mipmap-mdpi/icon_background.png diff --git a/platform/android/java/lib/res/mipmap-mdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-mdpi/icon_foreground.png Binary files differnew file mode 100644 index 0000000000..982b69be1e --- /dev/null +++ b/platform/android/java/lib/res/mipmap-mdpi/icon_foreground.png diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon.png b/platform/android/java/lib/res/mipmap-xhdpi/icon.png Binary files differnew file mode 100644 index 0000000000..9281d8da48 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xhdpi/icon.png diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon_background.png b/platform/android/java/lib/res/mipmap-xhdpi/icon_background.png Binary files differnew file mode 100644 index 0000000000..4269c822a7 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xhdpi/icon_background.png diff --git a/platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.png Binary files differnew file mode 100644 index 0000000000..726b267ad6 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xhdpi/icon_foreground.png diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon.png b/platform/android/java/lib/res/mipmap-xxhdpi/icon.png Binary files differnew file mode 100644 index 0000000000..7a6b67d273 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xxhdpi/icon.png diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon_background.png b/platform/android/java/lib/res/mipmap-xxhdpi/icon_background.png Binary files differnew file mode 100644 index 0000000000..5e8b518d17 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xxhdpi/icon_background.png diff --git a/platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.png Binary files differnew file mode 100644 index 0000000000..b0c727f74c --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xxhdpi/icon_foreground.png diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon.png b/platform/android/java/lib/res/mipmap-xxxhdpi/icon.png Binary files differnew file mode 100644 index 0000000000..0881245802 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xxxhdpi/icon.png diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.png b/platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.png Binary files differnew file mode 100644 index 0000000000..004b6fd508 --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xxxhdpi/icon_background.png diff --git a/platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.png b/platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.png Binary files differnew file mode 100644 index 0000000000..72e6f92b6e --- /dev/null +++ b/platform/android/java/lib/res/mipmap-xxxhdpi/icon_foreground.png diff --git a/platform/android/java/lib/res/mipmap/icon.png b/platform/android/java/lib/res/mipmap/icon.png Binary files differnew file mode 100644 index 0000000000..0881245802 --- /dev/null +++ b/platform/android/java/lib/res/mipmap/icon.png diff --git a/platform/android/java/lib/res/mipmap/icon_background.png b/platform/android/java/lib/res/mipmap/icon_background.png Binary files differnew file mode 100644 index 0000000000..5813f751ed --- /dev/null +++ b/platform/android/java/lib/res/mipmap/icon_background.png diff --git a/platform/android/java/lib/res/mipmap/icon_foreground.png b/platform/android/java/lib/res/mipmap/icon_foreground.png Binary files differnew file mode 100644 index 0000000000..982b69be1e --- /dev/null +++ b/platform/android/java/lib/res/mipmap/icon_foreground.png 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" |