diff options
104 files changed, 1810 insertions, 1390 deletions
@@ -25,7 +25,6 @@ generous deed immortalized in the next stable release of Godot Engine. AD Ford Alan Beauchamp Anand Mallik - Andres Hernandez Andrew Dunai Brandon Lamb Christian Baune @@ -36,7 +35,6 @@ generous deed immortalized in the next stable release of Godot Engine. Edward Flick Gamechuck GameDev.net - GameDev.tv Grady Hein-Pieter van Braam Jacob McKenney @@ -60,13 +58,10 @@ generous deed immortalized in the next stable release of Godot Engine. ## Gold donors - Andrei - Dave David Gehrig David Graham David Snopek Ed Morley - Florian Krick Florian Rämisch Jakub Grzesik Manuele Finocchiaro @@ -85,11 +80,9 @@ generous deed immortalized in the next stable release of Godot Engine. David Giardi Default Name eggs - Felix Bohmann Florian Breisch Gamejunkey Javier Roman - Jay Horton Jon Woodward Karl Werf Keinan Powers @@ -100,6 +93,7 @@ generous deed immortalized in the next stable release of Godot Engine. Matthew Hillier Mohamed Ikbel Boulabiar Mored4u + Rene Retro Village Rob Messick Ryan Badour @@ -122,15 +116,10 @@ generous deed immortalized in the next stable release of Godot Engine. Darrian Little Horváth Péter Ivan Trombley - Jakub Dering Joan Fons Joshua Flores - Krzysztof Jankowski - Lord Bloodhound - Pascal Grüter Petr Malac Rami - Reneator Rob Robert Willes Ronnie Ashlock @@ -144,9 +133,9 @@ generous deed immortalized in the next stable release of Godot Engine. Adam Nakonieczny Adam Neumann + Adrian Demetrescu Alexander J Maynard Alexey Dyadchenko - Alex Z Andreas Funke André Frélicot aoshiwik @@ -158,50 +147,42 @@ generous deed immortalized in the next stable release of Godot Engine. Christian Alexander Bjørklund Bøhler Christian Leth Jeppesen Christoph Schröder + Codee Leaf Cody Parker Coldragon Craig Ostrin D - Daniel Eichler - David White - Denis Janßen Easypete Eric Monson - ethan ball Eugenio Hugo Salgüero Jáñez Fain flesk Gary Hulst gavlig GGGames.org - Green Fox Guilherme Felipe de C. G. da Silva Halom Vered Heath Hayes - Idzard Kwadijk Isaac Clausman Jared White Jeff Nyte - Jeremy Sims - Jerry Ling Joe Flood John G Gentzel - Jon Hermansen Jose Malheiro Joshua Lesperance Juan Velandia Juraj Móza Kelteseth + kickmaniac kinfox + Lain Ballard Marcelo Dornbusch Lopes Markus Fehr Markus Wiesner Martin Eigel Matt Eunson - Max Bulai m kaersten MuffinManKen - Nick Nikitin Oliver Dick Oscar Campos Patrick Ting @@ -210,9 +191,8 @@ generous deed immortalized in the next stable release of Godot Engine. Pete Goodwin pl Ranoller - Robert Larnach + Rob McInroy Rocknight Studios - Romildo Franco Ryan Samuel Judd Scott Pilet @@ -221,10 +201,8 @@ generous deed immortalized in the next stable release of Godot Engine. Sindre Sømme SleepCircle spilldata - Steve Hyatt Stoned Xander TheLevelOfDetail . - Thomas Krampl Thomas Kurz Tobias Bocanegra Urho @@ -237,6 +215,7 @@ generous deed immortalized in the next stable release of Godot Engine. 1D_Inc Abraham Haskins + Acheron Adam Adam Brunnmeier Adam Carr @@ -247,7 +226,6 @@ generous deed immortalized in the next stable release of Godot Engine. Adam Smeltzer Adam Szymański Adisibio - Adrian Demetrescu Agustinus Arya Aidan O'Flannagain Aki Mimoto @@ -279,14 +257,13 @@ generous deed immortalized in the next stable release of Godot Engine. B A Balázs Batári Benedikt - Ben G - Ben Phelan Ben Vercammen Bernd Jänichen Bjarne Black Block Blair Allen Bobby CC Wong + Bram brian bugcaptor Burney Waring @@ -294,6 +271,7 @@ generous deed immortalized in the next stable release of Godot Engine. Carlo Sitaro Carl van der Geest Carwyn Edwards + Cas Brugman Cassidy James Chris Brown Chris Chapin @@ -304,17 +282,17 @@ generous deed immortalized in the next stable release of Godot Engine. Christopher Schmitt Christoph Woinke Clay Heaton + Cole Johnson Curt King Daniel Johnson Daniel Kimblad - Daniel Pontillo + Daniel Tebbutt David May David Woodard DiCola Jamn Dominic Cooney Dominik Wetzel Donn Eddy - Donovan Hutcheon Dragontrapper Dr Ewan Murray Duobix @@ -322,9 +300,9 @@ generous deed immortalized in the next stable release of Godot Engine. Dylan Todd Eduardo Teixeira Edward Herbert - Edward Moulsdale Edward Swartz Egon Elbre + Elgenzay Elias Nykrem Elmeri '- Duy Kevin Nguyen Ephemeral @@ -335,20 +313,21 @@ generous deed immortalized in the next stable release of Godot Engine. Evan Rose Fancy Ants Studios Fekinox + Felix Bohmann Felix Kollmann Flaredown Forty Doubleu + fox FuDiggity Gadzhi Kharkharov gamedev by Celio Gary Thomas George Marques - GiulianoB Greg Olson GREGORY C FEIN - Greg P Greyson Richey Grid + Guillaume Audirac Guldoman Hal A Heribert Hirth @@ -358,6 +337,7 @@ generous deed immortalized in the next stable release of Godot Engine. Iiari iKlem IndustrialRobot + Ivan Nikolaev Jacob Jaiden Gerig Jaime Ruiz-Borau Vizárraga @@ -368,26 +348,26 @@ generous deed immortalized in the next stable release of Godot Engine. JARKKO PARVIAINEN Jeff Hungerford Jennifer Graves - Jeremy Kahn Jesse Dubay Joel Fivat Joel Höglund Joel Setterberg - Johannes Wuensch John Gabriel + John Walker Jomei Jackson + Jonas Jonas Bernemann Jonas Rudlang Jonas Yamazaki Jonatan R Jonathan G - Jonathon Jon Bonazza Jon Sully Jorge Caballero Jose Aleman Jose C. Rubio Joseph Catrambone + Josh Mitchell Juanfran Judd Julian Murgia @@ -395,16 +375,16 @@ generous deed immortalized in the next stable release of Godot Engine. Justin Hamilton Justin Spedding KaDokta + Karel Němec Kauzig Keedong Park Keith Bradner + Kent Jofur Kevin McPhillips - kickmaniac Kiri Jolly Kiyohiro Kawamura (kyorohiro) Kjetil Haugland Klagsam - KR McGinley KsyTek Games Kuan Cheang kycho @@ -415,6 +395,7 @@ generous deed immortalized in the next stable release of Godot Engine. Lin Chear Linus Lind Lundgren Lionel Gaillard + Lukáš Rendvanský Luigi Renna LunaticInAHat Lurkars @@ -429,10 +410,10 @@ generous deed immortalized in the next stable release of Godot Engine. Mathieu Rimelen Matt Edwards Matthew Little - Matti Pohjanvirta + Mauro Pellegrini + Max Fiedler Maxime Blade Maxwell - medecau Megasploot Melissa Mears mewin @@ -447,6 +428,7 @@ generous deed immortalized in the next stable release of Godot Engine. Mike Cunningham Mitchell J. Wagner MoM + Mored4u Nathan Fish Natrim nee @@ -456,9 +438,9 @@ generous deed immortalized in the next stable release of Godot Engine. Nicholas Nicholas Girga Nick Macholl + Niclas Eriksen Nicolás Montaña Nicolas SAN AGUSTIN - Nima Farid NZ Oleg Reva Olivier @@ -471,13 +453,11 @@ generous deed immortalized in the next stable release of Godot Engine. Paweł Kowal Pedro Assuncao Penguin - Petrus Prinsloo Philip Cohoe Point08 Rad Cat Rafa Laguna rainerLinux - Raphael Leroux Remi Rampin Rémi Verschelde Ricardo Alcantara @@ -485,7 +465,6 @@ generous deed immortalized in the next stable release of Godot Engine. Richard Ivánek Robert Farr (Larington) Robert Hernandez - Roberto Sánchez Roger Smith Roland Rząsa Roman Tinkov @@ -493,26 +472,28 @@ generous deed immortalized in the next stable release of Godot Engine. Ronan Ryan Groom Ryan Hentz - Sam.C Sam Edson Samuele Zolfanelli - Sasori Olkof Scott D. Yelich Scott Longley + ScottMakesGames Sebastian Michailidis Sebastian Vetter Sergio Mello-Grand - sgnsajgon Shane Shane Sicienski Shane Spoor Siim Raidma + Simon Jonas Larsen Simon Wenner + Sintinium SK smbe19 smo1704 Stefano Caronia + Steve Cloete Svenne Krap + Taylor Fahlman Terry tezuvholovdr thomas @@ -521,10 +502,10 @@ generous deed immortalized in the next stable release of Godot Engine. Thomas Kelly Tim Drumheller Timothy B. MacDonald - tinyBigGames LLC Title Plinsut Tobbun Tom Glenn + Toni Duran Torgeir Lilleskog Torsten Crass Travis O'Brien diff --git a/core/array.cpp b/core/array.cpp index cd4e0fb4c8..7c0129ffde 100644 --- a/core/array.cpp +++ b/core/array.cpp @@ -285,59 +285,49 @@ Array Array::duplicate(bool p_deep) const { return new_arr; } -int Array::_fix_slice_index(int p_index, int p_arr_len, int p_top_mod) { - p_index = CLAMP(p_index, -p_arr_len, p_arr_len + p_top_mod); - if (p_index < 0) { - p_index = (p_index % p_arr_len + p_arr_len) % p_arr_len; // positive modulo - } - return p_index; -} +int Array::_clamp_slice_index(int p_index) const { -int Array::_clamp_index(int p_index) const { - return CLAMP(p_index, -size() + 1, size() - 1); + int arr_size = size(); + int fixed_index = CLAMP(p_index, -arr_size, arr_size - 1); + if (fixed_index < 0) { + fixed_index = arr_size + fixed_index; + } + return fixed_index; } -#define ARRAY_GET_DEEP(idx, is_deep) is_deep ? get(idx).duplicate(is_deep) : get(idx) - Array Array::slice(int p_begin, int p_end, int p_step, bool p_deep) const { // like python, but inclusive on upper bound - Array new_arr; - - if (empty()) // Don't try to slice empty arrays. - return new_arr; - p_begin = Array::_fix_slice_index(p_begin, size(), -1); // can't start out of range - p_end = Array::_fix_slice_index(p_end, size(), 0); + Array new_arr; - int x = p_begin; - int new_arr_i = 0; + ERR_FAIL_COND_V_MSG(p_step == 0, new_arr, "Array slice step size cannot be zero."); - ERR_FAIL_COND_V(p_step == 0, new_arr); - if (Array::_clamp_index(p_begin) == Array::_clamp_index(p_end)) { // don't include element twice - new_arr.resize(1); - // new_arr[0] = 1; - new_arr[0] = ARRAY_GET_DEEP(Array::_clamp_index(p_begin), p_deep); + if (empty()) // Don't try to slice empty arrays. return new_arr; - } else { - int element_count = ceil((int)MAX(0, (p_end - p_begin) / p_step)) + 1; - if (element_count == 1) { // delta going in wrong direction to reach end - new_arr.resize(0); + if (p_step > 0) { + if (p_begin >= size() || p_end < -size()) + return new_arr; + } else { // p_step < 0 + if (p_begin < -size() || p_end >= size()) return new_arr; - } - new_arr.resize(element_count); } - // if going backwards, have to have a different terminating condition - if (p_step < 0) { - while (x >= p_end) { - new_arr[new_arr_i] = ARRAY_GET_DEEP(Array::_clamp_index(x), p_deep); - x += p_step; - new_arr_i += 1; + int begin = _clamp_slice_index(p_begin); + int end = _clamp_slice_index(p_end); + + int new_arr_size = MAX(((end - begin + p_step) / p_step), 0); + new_arr.resize(new_arr_size); + + if (p_step > 0) { + int dest_idx = 0; + for (int idx = begin; idx <= end; idx += p_step) { + ERR_FAIL_COND_V_MSG(dest_idx < 0 || dest_idx >= new_arr_size, Array(), "Bug in Array slice()"); + new_arr[dest_idx++] = p_deep ? get(idx).duplicate(p_deep) : get(idx); } - } else if (p_step > 0) { - while (x <= p_end) { - new_arr[new_arr_i] = ARRAY_GET_DEEP(Array::_clamp_index(x), p_deep); - x += p_step; - new_arr_i += 1; + } else { // p_step < 0 + int dest_idx = 0; + for (int idx = begin; idx >= end; idx += p_step) { + ERR_FAIL_COND_V_MSG(dest_idx < 0 || dest_idx >= new_arr_size, Array(), "Bug in Array slice()"); + new_arr[dest_idx++] = p_deep ? get(idx).duplicate(p_deep) : get(idx); } } diff --git a/core/array.h b/core/array.h index 2840ce199c..14db57f15f 100644 --- a/core/array.h +++ b/core/array.h @@ -44,8 +44,7 @@ class Array { void _ref(const Array &p_from) const; void _unref() const; - int _clamp_index(int p_index) const; - static int _fix_slice_index(int p_index, int p_arr_len, int p_top_mod); + inline int _clamp_slice_index(int p_index) const; protected: Array(const Array &p_base, uint32_t p_type, const StringName &p_class_name, const Variant &p_script); diff --git a/core/input/input_event.cpp b/core/input/input_event.cpp index d18adb1983..4b8c104f39 100644 --- a/core/input/input_event.cpp +++ b/core/input/input_event.cpp @@ -708,7 +708,7 @@ String InputEventMouseMotion::as_text() const { button_mask_string = itos(get_button_mask()); break; } - return "InputEventMouseMotion : button_mask=" + button_mask_string + ", position=(" + String(get_position()) + "), relative=(" + String(get_relative()) + "), speed=(" + String(get_speed()) + ")"; + return "InputEventMouseMotion : button_mask=" + button_mask_string + ", position=(" + String(get_position()) + "), relative=(" + String(get_relative()) + "), speed=(" + String(get_speed()) + "), pressure=(" + rtos(get_pressure()) + "), tilt=(" + String(get_tilt()) + ")"; } bool InputEventMouseMotion::accumulate(const Ref<InputEvent> &p_event) { diff --git a/core/io/logger.cpp b/core/io/logger.cpp index 48aebeda3d..ad0cc81023 100644 --- a/core/io/logger.cpp +++ b/core/io/logger.cpp @@ -34,17 +34,6 @@ #include "core/os/os.h" #include "core/print_string.h" -// va_copy was defined in the C99, but not in C++ standards before C++11. -// When you compile C++ without --std=c++<XX> option, compilers still define -// va_copy, otherwise you have to use the internal version (__va_copy). -#if !defined(va_copy) -#if defined(__GNUC__) -#define va_copy(d, s) __va_copy((d), (s)) -#else -#define va_copy(d, s) ((d) = (s)) -#endif -#endif - #if defined(MINGW_ENABLED) || defined(_MSC_VER) #define sprintf sprintf_s #endif diff --git a/core/math/octree.h b/core/math/octree.h index 2060a61b4b..ffb405bd0f 100644 --- a/core/math/octree.h +++ b/core/math/octree.h @@ -1290,10 +1290,12 @@ void Octree<T, use_pairs, AL>::_cull_point(Octant *p_octant, const Vector3 &p_po template <class T, bool use_pairs, class AL> int Octree<T, use_pairs, AL>::cull_convex(const Vector<Plane> &p_convex, T **p_result_array, int p_result_max, uint32_t p_mask) { - if (!root) + if (!root || p_convex.size() == 0) return 0; Vector<Vector3> convex_points = Geometry::compute_convex_mesh_points(&p_convex[0], p_convex.size()); + if (convex_points.size() == 0) + return 0; int result_count = 0; pass++; diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp index 97a9216a5a..ed95baa233 100644 --- a/core/math/transform_2d.cpp +++ b/core/math/transform_2d.cpp @@ -70,6 +70,18 @@ void Transform2D::rotate(real_t p_phi) { *this = Transform2D(p_phi, Vector2()) * (*this); } +real_t Transform2D::get_skew() const { + + real_t det = basis_determinant(); + return Math::acos(elements[0].normalized().dot(SGN(det) * elements[1].normalized())) - Math_PI * 0.5; +} + +void Transform2D::set_skew(float p_angle) { + + real_t det = basis_determinant(); + elements[1] = SGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length(); +} + real_t Transform2D::get_rotation() const { real_t det = basis_determinant(); Transform2D m = orthonormalized(); diff --git a/core/math/transform_2d.h b/core/math/transform_2d.h index fa43762aa4..459ceed7a9 100644 --- a/core/math/transform_2d.h +++ b/core/math/transform_2d.h @@ -70,7 +70,10 @@ struct Transform2D { void set_rotation(real_t p_rot); real_t get_rotation() const; + real_t get_skew() const; + void set_skew(float p_angle); _FORCE_INLINE_ void set_rotation_and_scale(real_t p_rot, const Size2 &p_scale); + _FORCE_INLINE_ void set_rotation_scale_and_skew(real_t p_rot, const Size2 &p_scale, float p_skew); void rotate(real_t p_phi); void scale(const Size2 &p_scale); @@ -184,6 +187,14 @@ void Transform2D::set_rotation_and_scale(real_t p_rot, const Size2 &p_scale) { elements[0][1] = Math::sin(p_rot) * p_scale.x; } +void Transform2D::set_rotation_scale_and_skew(real_t p_rot, const Size2 &p_scale, float p_skew) { + + elements[0][0] = Math::cos(p_rot) * p_scale.x; + elements[1][1] = Math::cos(p_rot + p_skew) * p_scale.y; + elements[1][0] = -Math::sin(p_rot + p_skew) * p_scale.y; + elements[0][1] = Math::sin(p_rot) * p_scale.x; +} + Rect2 Transform2D::xform_inv(const Rect2 &p_rect) const { Vector2 ends[4] = { diff --git a/core/os/os.h b/core/os/os.h index 714a10bf76..38114e6814 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -59,6 +59,7 @@ class OS { bool _allow_layered; bool _use_vsync; bool _vsync_via_compositor; + bool _disable_wintab; char *last_error; @@ -148,6 +149,7 @@ public: bool is_layered_allowed() const { return _allow_layered; } bool is_hidpi_allowed() const { return _allow_hidpi; } + bool is_wintab_disabled() const { return _disable_wintab; } void ensure_user_data_dir(); diff --git a/core/project_settings.cpp b/core/project_settings.cpp index 63b52661b4..8829181489 100644 --- a/core/project_settings.cpp +++ b/core/project_settings.cpp @@ -362,40 +362,29 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b // We need to test both possibilities as extensions for Linux binaries are optional // (so both 'mygame.bin' and 'mygame' should be able to find 'mygame.pck'). - bool found = false; - String exec_dir = exec_path.get_base_dir(); String exec_filename = exec_path.get_file(); String exec_basename = exec_filename.get_basename(); - // Try to load data pack at the location of the executable - // As mentioned above, we have two potential names to attempt - - if (_load_resource_pack(exec_dir.plus_file(exec_basename + ".pck")) || - _load_resource_pack(exec_dir.plus_file(exec_filename + ".pck"))) { - found = true; - } else { - // If we couldn't find them next to the executable, we attempt - // the current working directory. Same story, two tests. - if (_load_resource_pack(exec_basename + ".pck") || - _load_resource_pack(exec_filename + ".pck")) { - found = true; - } - } + // Attempt with PCK bundled into executable + bool found = _load_resource_pack(exec_path); #ifdef OSX_ENABLED - // Attempt to load PCK from macOS .app bundle resources if (!found) { - if (_load_resource_pack(OS::get_singleton()->get_bundle_resource_dir().plus_file(exec_basename + ".pck"))) { - found = true; - } + // Attempt to load PCK from macOS .app bundle resources + found = _load_resource_pack(OS::get_singleton()->get_bundle_resource_dir().plus_file(exec_basename + ".pck")); } #endif - // Attempt with PCK bundled into executable if (!found) { - if (_load_resource_pack(exec_path)) { - found = true; + // Try to load data pack at the location of the executable + // As mentioned above, we have two potential names to attempt + found = _load_resource_pack(exec_dir.plus_file(exec_basename + ".pck")) || _load_resource_pack(exec_dir.plus_file(exec_filename + ".pck")); + + if (!found) { + // If we couldn't find them next to the executable, we attempt + // the current working directory. Same story, two tests. + found = _load_resource_pack(exec_basename + ".pck") || _load_resource_pack(exec_filename + ".pck"); } } diff --git a/core/variant.h b/core/variant.h index a832f7ccf8..1ae09ad82f 100644 --- a/core/variant.h +++ b/core/variant.h @@ -67,13 +67,6 @@ typedef Vector<Vector2> PackedVector2Array; typedef Vector<Vector3> PackedVector3Array; typedef Vector<Color> PackedColorArray; -// Temporary workaround until c++11 alignas() -#ifdef __GNUC__ -#define GCC_ALIGNED_8 __attribute__((aligned(8))) -#else -#define GCC_ALIGNED_8 -#endif - class Variant { public: // If this changes the table in variant_op must be updated @@ -211,7 +204,7 @@ private: PackedArrayRefBase *packed_array; void *_ptr; //generic pointer uint8_t _mem[sizeof(ObjData) > (sizeof(real_t) * 4) ? sizeof(ObjData) : (sizeof(real_t) * 4)]; - } _data GCC_ALIGNED_8; + } _data alignas(8); void reference(const Variant &p_variant); void clear(); diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index b3cd1c1af7..222b70c9c7 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -77,6 +77,9 @@ <member name="ProjectSettings" type="ProjectSettings" setter="" getter=""> The [ProjectSettings] singleton. </member> + <member name="RenderingDevice" type="RenderingDevice" setter="" getter=""> + The [RenderingDevice] singleton. + </member> <member name="RenderingServer" type="RenderingServer" setter="" getter=""> The [RenderingServer] singleton. </member> @@ -1177,10 +1180,10 @@ [codeblock] var err = method_that_returns_error() if err != OK: - print("Failure!) + print("Failure!") # Or, equivalent: if err: - print("Still failing!) + print("Still failing!") [/codeblock] </constant> <constant name="FAILED" value="1" enum="Error"> diff --git a/doc/classes/BaseMaterial3D.xml b/doc/classes/BaseMaterial3D.xml index 76abc31451..1da4e23437 100644 --- a/doc/classes/BaseMaterial3D.xml +++ b/doc/classes/BaseMaterial3D.xml @@ -159,6 +159,7 @@ </member> <member name="detail_normal" type="Texture2D" setter="set_texture" getter="get_texture"> Texture that specifies the per-pixel normal of the detail overlay. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="detail_uv_layer" type="int" setter="set_detail_uv" getter="get_detail_uv" enum="BaseMaterial3D.DetailUV"> Specifies whether to use [code]UV[/code] or [code]UV2[/code] for the detail layer. See [enum DetailUV] for options. @@ -250,6 +251,7 @@ </member> <member name="normal_texture" type="Texture2D" setter="set_texture" getter="get_texture"> Texture used to specify the normal at a given pixel. The [code]normal_texture[/code] only uses the red and green channels. The normal read from [code]normal_texture[/code] is oriented around the surface normal provided by the [Mesh]. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="orm_texture" type="Texture2D" setter="set_texture" getter="get_texture"> </member> diff --git a/doc/classes/CPUParticles2D.xml b/doc/classes/CPUParticles2D.xml index c2b821699d..df3ef71a2a 100644 --- a/doc/classes/CPUParticles2D.xml +++ b/doc/classes/CPUParticles2D.xml @@ -240,6 +240,7 @@ </member> <member name="normalmap" type="Texture2D" setter="set_normalmap" getter="get_normalmap"> Normal map to be used for the [member texture] property. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="one_shot" type="bool" setter="set_one_shot" getter="get_one_shot" default="false"> If [code]true[/code], only one emission cycle occurs. If set [code]true[/code] during a cycle, emission will stop at the cycle's end. diff --git a/doc/classes/GPUParticles2D.xml b/doc/classes/GPUParticles2D.xml index 64a2522f2f..ee67b5052c 100644 --- a/doc/classes/GPUParticles2D.xml +++ b/doc/classes/GPUParticles2D.xml @@ -53,6 +53,7 @@ </member> <member name="normal_map" type="Texture2D" setter="set_normal_map" getter="get_normal_map"> Normal map to be used for the [member texture] property. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="one_shot" type="bool" setter="set_one_shot" getter="get_one_shot" default="false"> If [code]true[/code], only one emission cycle occurs. If set [code]true[/code] during a cycle, emission will stop at the cycle's end. diff --git a/doc/classes/MeshInstance2D.xml b/doc/classes/MeshInstance2D.xml index 0cfc8deb0a..689f8d83e1 100644 --- a/doc/classes/MeshInstance2D.xml +++ b/doc/classes/MeshInstance2D.xml @@ -17,6 +17,7 @@ </member> <member name="normal_map" type="Texture2D" setter="set_normal_map" getter="get_normal_map"> The normal map that will be used if using the default [CanvasItemMaterial]. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="texture" type="Texture2D" setter="set_texture" getter="get_texture"> The [Texture2D] that will be used if using the default [CanvasItemMaterial]. Can be accessed as [code]TEXTURE[/code] in CanvasItem shader. diff --git a/doc/classes/MultiMeshInstance2D.xml b/doc/classes/MultiMeshInstance2D.xml index 07f21514ef..a461c8e056 100644 --- a/doc/classes/MultiMeshInstance2D.xml +++ b/doc/classes/MultiMeshInstance2D.xml @@ -17,6 +17,7 @@ </member> <member name="normal_map" type="Texture2D" setter="set_normal_map" getter="get_normal_map"> The normal map that will be used if using the default [CanvasItemMaterial]. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="texture" type="Texture2D" setter="set_texture" getter="get_texture"> The [Texture2D] that will be used if using the default [CanvasItemMaterial]. Can be accessed as [code]TEXTURE[/code] in CanvasItem shader. diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml index d4517f0588..d29c556216 100644 --- a/doc/classes/Node2D.xml +++ b/doc/classes/Node2D.xml @@ -142,6 +142,10 @@ <member name="scale" type="Vector2" setter="set_scale" getter="get_scale" default="Vector2( 1, 1 )"> The node's scale. Unscaled value: [code](1, 1)[/code]. </member> + <member name="skew" type="float" setter="set_skew" getter="get_skew" default="0.0"> + </member> + <member name="skew_degrees" type="float" setter="set_skew_degrees" getter="get_skew_degrees" default="0.0"> + </member> <member name="transform" type="Transform2D" setter="set_transform" getter="get_transform"> Local [Transform2D]. </member> diff --git a/doc/classes/Node3D.xml b/doc/classes/Node3D.xml index 3e7d4d4c05..05d00b9f31 100644 --- a/doc/classes/Node3D.xml +++ b/doc/classes/Node3D.xml @@ -26,7 +26,7 @@ Returns the parent [Node3D], or an empty [Object] if no parent exists or parent is not of type [Node3D]. </description> </method> - <method name="get_world" qualifiers="const"> + <method name="get_world_3d" qualifiers="const"> <return type="World3D"> </return> <description> diff --git a/doc/classes/Polygon2D.xml b/doc/classes/Polygon2D.xml index 13332ca4f0..335df1ac3f 100644 --- a/doc/classes/Polygon2D.xml +++ b/doc/classes/Polygon2D.xml @@ -102,6 +102,8 @@ If [code]true[/code], polygon will be inverted, containing the area outside the defined points and extending to the [code]invert_border[/code]. </member> <member name="normal_map" type="Texture2D" setter="set_normal_map" getter="get_normal_map"> + The normal map gives depth to the Polygon2D. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="offset" type="Vector2" setter="set_offset" getter="get_offset" default="Vector2( 0, 0 )"> The offset applied to each vertex. diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index a9ac307df4..a111b5bdde 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -414,6 +414,9 @@ <member name="display/mouse_cursor/tooltip_position_offset" type="Vector2" setter="" getter="" default="Vector2( 10, 10 )"> Position offset for tooltips, relative to the mouse cursor's hotspot. </member> + <member name="display/window/disable_wintab_api" type="bool" setter="" getter="" default="false"> + Disables WinTab API and always use Windows Ink API for the pen input (Windows only). + </member> <member name="display/window/dpi/allow_hidpi" type="bool" setter="" getter="" default="false"> If [code]true[/code], allows HiDPI display on Windows and macOS. This setting has no effect on desktop Linux, as DPI-awareness fallbacks are not supported there. </member> diff --git a/doc/classes/RenderingServer.xml b/doc/classes/RenderingServer.xml index 4e0762a68b..648f4d0107 100644 --- a/doc/classes/RenderingServer.xml +++ b/doc/classes/RenderingServer.xml @@ -9,7 +9,7 @@ The rendering server can be used to bypass the scene system entirely. Resources are created using the [code]*_create[/code] functions. All objects are drawn to a viewport. You can use the [Viewport] attached to the [SceneTree] or you can create one yourself with [method viewport_create]. When using a custom scenario or canvas, the scenario or canvas needs to be attached to the viewport using [method viewport_set_scenario] or [method viewport_attach_canvas]. - In 3D, all visual objects must be associated with a scenario. The scenario is a visual representation of the world. If accessing the rendering server from a running game, the scenario can be accessed from the scene tree from any [Node3D] node with [method Node3D.get_world]. Otherwise, a scenario can be created with [method scenario_create]. + In 3D, all visual objects must be associated with a scenario. The scenario is a visual representation of the world. If accessing the rendering server from a running game, the scenario can be accessed from the scene tree from any [Node3D] node with [method Node3D.get_world_3d]. Otherwise, a scenario can be created with [method scenario_create]. Similarly in 2D, a canvas is needed to draw all canvas items. In 3D, all visible objects are comprised of a resource and an instance. A resource can be a mesh, a particle system, a light, or any other 3D object. In order to be visible resources must be attached to an instance using [method instance_set_base]. The instance must also be attached to the scenario using [method instance_set_scenario] in order to be visible. In 2D, all visible objects are some form of canvas item. In order to be visible, a canvas item needs to be the child of a canvas attached to a viewport, or it needs to be the child of another canvas item that is eventually attached to the canvas. diff --git a/doc/classes/SpinBox.xml b/doc/classes/SpinBox.xml index c8ba8ab697..e674ceb57e 100644 --- a/doc/classes/SpinBox.xml +++ b/doc/classes/SpinBox.xml @@ -45,7 +45,7 @@ Adds the specified [code]prefix[/code] string before the numerical value of the [SpinBox]. </member> <member name="suffix" type="String" setter="set_suffix" getter="get_suffix" default=""""> - Adds the specified [code]prefix[/code] string after the numerical value of the [SpinBox]. + Adds the specified [code]suffix[/code] string after the numerical value of the [SpinBox]. </member> </members> <constants> diff --git a/doc/classes/Sprite2D.xml b/doc/classes/Sprite2D.xml index 950fda4e20..92f561d7b5 100644 --- a/doc/classes/Sprite2D.xml +++ b/doc/classes/Sprite2D.xml @@ -54,6 +54,7 @@ </member> <member name="normal_map" type="Texture2D" setter="set_normal_map" getter="get_normal_map"> The normal map gives depth to the Sprite2D. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="offset" type="Vector2" setter="set_offset" getter="get_offset" default="Vector2( 0, 0 )"> The texture's drawing offset. diff --git a/doc/classes/StyleBoxTexture.xml b/doc/classes/StyleBoxTexture.xml index 8ed94c8c26..f8aa14cb2b 100644 --- a/doc/classes/StyleBoxTexture.xml +++ b/doc/classes/StyleBoxTexture.xml @@ -121,6 +121,7 @@ </member> <member name="normal_map" type="Texture2D" setter="set_normal_map" getter="get_normal_map"> The normal map to use when drawing this style box. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </member> <member name="region_rect" type="Rect2" setter="set_region_rect" getter="get_region_rect" default="Rect2( 0, 0, 0, 0 )"> Species a sub-region of the texture to use. diff --git a/doc/classes/TileSet.xml b/doc/classes/TileSet.xml index 65988ae2b7..c647f83598 100644 --- a/doc/classes/TileSet.xml +++ b/doc/classes/TileSet.xml @@ -590,6 +590,7 @@ </argument> <description> Sets the tile's normal map texture. + [b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines. </description> </method> <method name="tile_set_occluder_offset"> diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml index a2d53f8e0c..3b52c80c9a 100644 --- a/doc/classes/Viewport.xml +++ b/doc/classes/Viewport.xml @@ -16,18 +16,18 @@ <link>https://docs.godotengine.org/en/latest/tutorials/viewports/index.html</link> </tutorials> <methods> - <method name="find_world" qualifiers="const"> - <return type="World3D"> + <method name="find_world_2d" qualifiers="const"> + <return type="World2D"> </return> <description> - Returns the 3D world of the viewport, or if none the world of the parent viewport. + Returns the 2D world of the viewport. </description> </method> - <method name="find_world_2d" qualifiers="const"> - <return type="World2D"> + <method name="find_world_3d" qualifiers="const"> + <return type="World3D"> </return> <description> - Returns the 2D world of the viewport. + Returns the 3D world of the viewport, or if none the world of the parent viewport. </description> </method> <method name="get_camera" qualifiers="const"> @@ -219,8 +219,8 @@ <member name="msaa" type="int" setter="set_msaa" getter="get_msaa" enum="Viewport.MSAA" default="0"> The multisample anti-aliasing mode. A higher number results in smoother edges at the cost of significantly worse performance. A value of 4 is best unless targeting very high-end systems. </member> - <member name="own_world" type="bool" setter="set_use_own_world" getter="is_using_own_world" default="false"> - If [code]true[/code], the viewport will use [World3D] defined in [code]world[/code] property. + <member name="own_world_3d" type="bool" setter="set_use_own_world_3d" getter="is_using_own_world_3d" default="false"> + If [code]true[/code], the viewport will use the [World3D] defined in [member world_3d]. </member> <member name="physics_object_picking" type="bool" setter="set_physics_object_picking" getter="get_physics_object_picking" default="false"> If [code]true[/code], the objects rendered by viewport become subjects of mouse picking process. @@ -247,12 +247,12 @@ <member name="transparent_bg" type="bool" setter="set_transparent_background" getter="has_transparent_background" default="false"> If [code]true[/code], the viewport should render its background as transparent. </member> - <member name="world" type="World3D" setter="set_world" getter="get_world"> - The custom [World3D] which can be used as 3D environment source. - </member> <member name="world_2d" type="World2D" setter="set_world_2d" getter="get_world_2d"> The custom [World2D] which can be used as 2D environment source. </member> + <member name="world_3d" type="World3D" setter="set_world_3d" getter="get_world_3d"> + The custom [World3D] which can be used as 3D environment source. + </member> </members> <signals> <signal name="gui_focus_changed"> diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 8089d463bd..b566ad0fa4 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -1052,6 +1052,7 @@ void EditorHelp::_update_doc() { class_desc->pop(); // color class_desc->pop(); // font class_desc->pop(); // cell + method_line[cd.properties[i].setter] = property_line[cd.properties[i].name]; } if (cd.properties[i].getter != "") { @@ -1069,6 +1070,7 @@ void EditorHelp::_update_doc() { class_desc->pop(); //color class_desc->pop(); //font class_desc->pop(); //cell + method_line[cd.properties[i].getter] = property_line[cd.properties[i].name]; } class_desc->pop(); // table diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index ea2009ab58..90cea06439 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -1747,7 +1747,7 @@ void EditorNode::push_item(Object *p_object, const String &p_property, bool p_in void EditorNode::_save_default_environment() { - Ref<Environment> fallback = get_tree()->get_root()->get_world()->get_fallback_environment(); + Ref<Environment> fallback = get_tree()->get_root()->get_world_3d()->get_fallback_environment(); if (fallback.is_valid() && fallback->get_path().is_resource_file()) { Map<RES, bool> processed; diff --git a/editor/node_3d_editor_gizmos.cpp b/editor/node_3d_editor_gizmos.cpp index 5fcc783644..c321e85546 100644 --- a/editor/node_3d_editor_gizmos.cpp +++ b/editor/node_3d_editor_gizmos.cpp @@ -169,7 +169,7 @@ void EditorNode3DGizmo::set_spatial_node(Node3D *p_node) { void EditorNode3DGizmo::Instance::create_instance(Node3D *p_base, bool p_hidden) { - instance = RS::get_singleton()->instance_create2(mesh->get_rid(), p_base->get_world()->get_scenario()); + instance = RS::get_singleton()->instance_create2(mesh->get_rid(), p_base->get_world_3d()->get_scenario()); RS::get_singleton()->instance_attach_object_instance_id(instance, p_base->get_instance_id()); if (skin_reference.is_valid()) { RS::get_singleton()->instance_attach_skeleton(instance, skin_reference->get_skeleton()); diff --git a/editor/plugins/material_editor_plugin.cpp b/editor/plugins/material_editor_plugin.cpp index eb14495b9c..f63bcb69b8 100644 --- a/editor/plugins/material_editor_plugin.cpp +++ b/editor/plugins/material_editor_plugin.cpp @@ -117,9 +117,9 @@ MaterialEditor::MaterialEditor() { add_child(vc); vc->set_anchors_and_margins_preset(PRESET_WIDE); viewport = memnew(SubViewport); - Ref<World3D> world; - world.instance(); - viewport->set_world(world); //use own world + Ref<World3D> world_3d; + world_3d.instance(); + viewport->set_world_3d(world_3d); //use own world vc->add_child(viewport); viewport->set_disable_input(true); viewport->set_transparent_background(true); diff --git a/editor/plugins/mesh_editor_plugin.cpp b/editor/plugins/mesh_editor_plugin.cpp index 5e657c3b71..3e603fa499 100644 --- a/editor/plugins/mesh_editor_plugin.cpp +++ b/editor/plugins/mesh_editor_plugin.cpp @@ -116,9 +116,9 @@ void MeshEditor::_bind_methods() { MeshEditor::MeshEditor() { viewport = memnew(SubViewport); - Ref<World3D> world; - world.instance(); - viewport->set_world(world); //use own world + Ref<World3D> world_3d; + world_3d.instance(); + viewport->set_world_3d(world_3d); //use own world add_child(viewport); viewport->set_disable_input(true); viewport->set_msaa(Viewport::MSAA_2X); diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 60a49f72c0..55b50f526c 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -496,7 +496,7 @@ ObjectID Node3DEditorViewport::_select_ray(const Point2 &p_pos, bool p_append, b Vector3 pos = _get_ray_pos(p_pos); Vector2 shrinked_pos = p_pos / subviewport_container->get_stretch_shrink(); - Vector<ObjectID> instances = RenderingServer::get_singleton()->instances_cull_ray(pos, ray, get_tree()->get_root()->get_world()->get_scenario()); + Vector<ObjectID> instances = RenderingServer::get_singleton()->instances_cull_ray(pos, ray, get_tree()->get_root()->get_world_3d()->get_scenario()); Set<Ref<EditorNode3DGizmo>> found_gizmos; Node *edited_scene = get_tree()->get_edited_scene_root(); @@ -563,7 +563,7 @@ void Node3DEditorViewport::_find_items_at_pos(const Point2 &p_pos, bool &r_inclu Vector3 ray = _get_ray(p_pos); Vector3 pos = _get_ray_pos(p_pos); - Vector<ObjectID> instances = RenderingServer::get_singleton()->instances_cull_ray(pos, ray, get_tree()->get_root()->get_world()->get_scenario()); + Vector<ObjectID> instances = RenderingServer::get_singleton()->instances_cull_ray(pos, ray, get_tree()->get_root()->get_world_3d()->get_scenario()); Set<Ref<EditorNode3DGizmo>> found_gizmos; r_includes_current = false; @@ -682,7 +682,7 @@ void Node3DEditorViewport::_select_region() { far.d += get_zfar(); frustum.push_back(far); - Vector<ObjectID> instances = RenderingServer::get_singleton()->instances_cull_convex(frustum, get_tree()->get_root()->get_world()->get_scenario()); + Vector<ObjectID> instances = RenderingServer::get_singleton()->instances_cull_convex(frustum, get_tree()->get_root()->get_world_3d()->get_scenario()); Vector<Node *> selected; Node *edited_scene = get_tree()->get_edited_scene_root(); @@ -3136,35 +3136,35 @@ void Node3DEditorViewport::_init_gizmo_instance(int p_idx) { for (int i = 0; i < 3; i++) { move_gizmo_instance[i] = RS::get_singleton()->instance_create(); RS::get_singleton()->instance_set_base(move_gizmo_instance[i], spatial_editor->get_move_gizmo(i)->get_rid()); - RS::get_singleton()->instance_set_scenario(move_gizmo_instance[i], get_tree()->get_root()->get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(move_gizmo_instance[i], get_tree()->get_root()->get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_visible(move_gizmo_instance[i], false); RS::get_singleton()->instance_geometry_set_cast_shadows_setting(move_gizmo_instance[i], RS::SHADOW_CASTING_SETTING_OFF); RS::get_singleton()->instance_set_layer_mask(move_gizmo_instance[i], layer); move_plane_gizmo_instance[i] = RS::get_singleton()->instance_create(); RS::get_singleton()->instance_set_base(move_plane_gizmo_instance[i], spatial_editor->get_move_plane_gizmo(i)->get_rid()); - RS::get_singleton()->instance_set_scenario(move_plane_gizmo_instance[i], get_tree()->get_root()->get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(move_plane_gizmo_instance[i], get_tree()->get_root()->get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_visible(move_plane_gizmo_instance[i], false); RS::get_singleton()->instance_geometry_set_cast_shadows_setting(move_plane_gizmo_instance[i], RS::SHADOW_CASTING_SETTING_OFF); RS::get_singleton()->instance_set_layer_mask(move_plane_gizmo_instance[i], layer); rotate_gizmo_instance[i] = RS::get_singleton()->instance_create(); RS::get_singleton()->instance_set_base(rotate_gizmo_instance[i], spatial_editor->get_rotate_gizmo(i)->get_rid()); - RS::get_singleton()->instance_set_scenario(rotate_gizmo_instance[i], get_tree()->get_root()->get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(rotate_gizmo_instance[i], get_tree()->get_root()->get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_visible(rotate_gizmo_instance[i], false); RS::get_singleton()->instance_geometry_set_cast_shadows_setting(rotate_gizmo_instance[i], RS::SHADOW_CASTING_SETTING_OFF); RS::get_singleton()->instance_set_layer_mask(rotate_gizmo_instance[i], layer); scale_gizmo_instance[i] = RS::get_singleton()->instance_create(); RS::get_singleton()->instance_set_base(scale_gizmo_instance[i], spatial_editor->get_scale_gizmo(i)->get_rid()); - RS::get_singleton()->instance_set_scenario(scale_gizmo_instance[i], get_tree()->get_root()->get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(scale_gizmo_instance[i], get_tree()->get_root()->get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_visible(scale_gizmo_instance[i], false); RS::get_singleton()->instance_geometry_set_cast_shadows_setting(scale_gizmo_instance[i], RS::SHADOW_CASTING_SETTING_OFF); RS::get_singleton()->instance_set_layer_mask(scale_gizmo_instance[i], layer); scale_plane_gizmo_instance[i] = RS::get_singleton()->instance_create(); RS::get_singleton()->instance_set_base(scale_plane_gizmo_instance[i], spatial_editor->get_scale_plane_gizmo(i)->get_rid()); - RS::get_singleton()->instance_set_scenario(scale_plane_gizmo_instance[i], get_tree()->get_root()->get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(scale_plane_gizmo_instance[i], get_tree()->get_root()->get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_visible(scale_plane_gizmo_instance[i], false); RS::get_singleton()->instance_geometry_set_cast_shadows_setting(scale_plane_gizmo_instance[i], RS::SHADOW_CASTING_SETTING_OFF); RS::get_singleton()->instance_set_layer_mask(scale_plane_gizmo_instance[i], layer); @@ -3530,7 +3530,7 @@ Vector3 Node3DEditorViewport::_get_instance_position(const Point2 &p_pos) const Vector3 world_ray = _get_ray(p_pos); Vector3 world_pos = _get_ray_pos(p_pos); - Vector<ObjectID> instances = RenderingServer::get_singleton()->instances_cull_ray(world_pos, world_ray, get_tree()->get_root()->get_world()->get_scenario()); + Vector<ObjectID> instances = RenderingServer::get_singleton()->instances_cull_ray(world_pos, world_ray, get_tree()->get_root()->get_world_3d()->get_scenario()); Set<Ref<EditorNode3DGizmo>> found_gizmos; float closest_dist = MAX_DISTANCE; @@ -4543,7 +4543,7 @@ Object *Node3DEditor::_get_editor_data(Object *p_what) { Node3DEditorSelectedItem *si = memnew(Node3DEditorSelectedItem); si->sp = sp; - si->sbox_instance = RenderingServer::get_singleton()->instance_create2(selection_box->get_rid(), sp->get_world()->get_scenario()); + si->sbox_instance = RenderingServer::get_singleton()->instance_create2(selection_box->get_rid(), sp->get_world_3d()->get_scenario()); RS::get_singleton()->instance_geometry_set_cast_shadows_setting(si->sbox_instance, RS::SHADOW_CASTING_SETTING_OFF); return si; @@ -5197,7 +5197,7 @@ void Node3DEditor::_init_indicators() { RenderingServer::get_singleton()->mesh_add_surface_from_arrays(origin, RenderingServer::PRIMITIVE_LINES, d); RenderingServer::get_singleton()->mesh_surface_set_material(origin, 0, indicator_mat->get_rid()); - origin_instance = RenderingServer::get_singleton()->instance_create2(origin, get_tree()->get_root()->get_world()->get_scenario()); + origin_instance = RenderingServer::get_singleton()->instance_create2(origin, get_tree()->get_root()->get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_layer_mask(origin_instance, 1 << Node3DEditorViewport::GIZMO_GRID_LAYER); RenderingServer::get_singleton()->instance_geometry_set_cast_shadows_setting(origin_instance, RS::SHADOW_CASTING_SETTING_OFF); @@ -5572,7 +5572,7 @@ void Node3DEditor::_init_grid() { d[RenderingServer::ARRAY_COLOR] = grid_colors[i]; RenderingServer::get_singleton()->mesh_add_surface_from_arrays(grid[i], RenderingServer::PRIMITIVE_LINES, d); RenderingServer::get_singleton()->mesh_surface_set_material(grid[i], 0, indicator_mat->get_rid()); - grid_instance[i] = RenderingServer::get_singleton()->instance_create2(grid[i], get_tree()->get_root()->get_world()->get_scenario()); + grid_instance[i] = RenderingServer::get_singleton()->instance_create2(grid[i], get_tree()->get_root()->get_world_3d()->get_scenario()); RenderingServer::get_singleton()->instance_set_visible(grid_instance[i], grid_visible[i]); RenderingServer::get_singleton()->instance_geometry_set_cast_shadows_setting(grid_instance[i], RS::SHADOW_CASTING_SETTING_OFF); @@ -5717,7 +5717,7 @@ void Node3DEditor::snap_selected_nodes_to_floor() { } } - PhysicsDirectSpaceState3D *ss = get_tree()->get_root()->get_world()->get_direct_space_state(); + PhysicsDirectSpaceState3D *ss = get_tree()->get_root()->get_world_3d()->get_direct_space_state(); PhysicsDirectSpaceState3D::RayResult result; Array keys = snap_data.keys(); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 1a77eeb9de..c79c97737a 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -978,6 +978,26 @@ void ScriptTextEditor::_lookup_symbol(const String &p_symbol, int p_row, int p_c emit_signal("go_to_help", "class_global:" + result.class_name + ":" + result.class_member); } break; } + } else if (ProjectSettings::get_singleton()->has_setting("autoload/" + p_symbol)) { + //check for Autoload scenes + String path = ProjectSettings::get_singleton()->get("autoload/" + p_symbol); + if (path.begins_with("*")) { + path = path.substr(1, path.length()); + EditorNode::get_singleton()->load_scene(path); + } + } else if (p_symbol.is_rel_path()) { + // Every symbol other than absolute path is relative path so keep this condition at last. + String path = _get_absolute_path(p_symbol); + if (FileAccess::exists(path)) { + List<String> scene_extensions; + ResourceLoader::get_recognized_extensions_for_type("PackedScene", &scene_extensions); + + if (scene_extensions.find(path.get_extension())) { + EditorNode::get_singleton()->load_scene(path); + } else { + EditorNode::get_singleton()->load_resource(path); + } + } } } @@ -991,13 +1011,28 @@ void ScriptTextEditor::_validate_symbol(const String &p_symbol) { } ScriptLanguage::LookupResult result; - if (ScriptServer::is_global_class(p_symbol) || p_symbol.is_resource_file() || script->get_language()->lookup_code(code_editor->get_text_edit()->get_text_for_lookup_completion(), p_symbol, script->get_path(), base, result) == OK) { + if (ScriptServer::is_global_class(p_symbol) || p_symbol.is_resource_file() || script->get_language()->lookup_code(code_editor->get_text_edit()->get_text_for_lookup_completion(), p_symbol, script->get_path(), base, result) == OK || ProjectSettings::get_singleton()->has_setting("autoload/" + p_symbol)) { text_edit->set_highlighted_word(p_symbol); + } else if (p_symbol.is_rel_path()) { + + String path = _get_absolute_path(p_symbol); + if (FileAccess::exists(path)) { + text_edit->set_highlighted_word(p_symbol); + } else { + text_edit->set_highlighted_word(String()); + } + } else { text_edit->set_highlighted_word(String()); } } +String ScriptTextEditor::_get_absolute_path(const String &rel_path) { + String base_path = script->get_path().get_base_dir(); + String path = base_path.plus_file(rel_path); + return path.replace("///", "//").simplify_path(); +} + void ScriptTextEditor::update_toggle_scripts_button() { if (code_editor != nullptr) { code_editor->update_toggle_scripts_button(); diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index 51ce30c831..a0dfba6cc8 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -188,6 +188,8 @@ protected: bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); + String _get_absolute_path(const String &rel_path); + public: void _update_connected_methods(); diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index a7e737fdd2..35ed29f562 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -546,6 +546,10 @@ void VisualShaderEditor::_update_graph() { Ref<VisualShaderNodeUniform> uniform = vsnode; Ref<VisualShaderNodeFloatUniform> float_uniform = vsnode; Ref<VisualShaderNodeIntUniform> int_uniform = vsnode; + Ref<VisualShaderNodeVec3Uniform> vec3_uniform = vsnode; + Ref<VisualShaderNodeColorUniform> color_uniform = vsnode; + Ref<VisualShaderNodeBooleanUniform> bool_uniform = vsnode; + Ref<VisualShaderNodeTransformUniform> transform_uniform = vsnode; if (uniform.is_valid()) { graph->add_child(node); _update_created_node(node); @@ -571,7 +575,7 @@ void VisualShaderEditor::_update_graph() { //shortcut VisualShaderNode::PortType port_right = vsnode->get_output_port_type(0); node->set_slot(0, false, VisualShaderNode::PORT_TYPE_SCALAR, Color(), true, port_right, type_color[port_right]); - if (!float_uniform.is_valid() && !int_uniform.is_valid()) { + if (!float_uniform.is_valid() && !int_uniform.is_valid() && !vec3_uniform.is_valid() && !color_uniform.is_valid() && !bool_uniform.is_valid() && !transform_uniform.is_valid()) { continue; } } @@ -585,13 +589,16 @@ void VisualShaderEditor::_update_graph() { } } - if (custom_editor && !float_uniform.is_valid() && !int_uniform.is_valid() && vsnode->get_output_port_count() > 0 && vsnode->get_output_port_name(0) == "" && (vsnode->get_input_port_count() == 0 || vsnode->get_input_port_name(0) == "")) { + if (custom_editor && !float_uniform.is_valid() && !int_uniform.is_valid() && !vec3_uniform.is_valid() && !bool_uniform.is_valid() && !transform_uniform.is_valid() && vsnode->get_output_port_count() > 0 && vsnode->get_output_port_name(0) == "" && (vsnode->get_input_port_count() == 0 || vsnode->get_input_port_name(0) == "")) { //will be embedded in first port } else if (custom_editor) { port_offset++; node->add_child(custom_editor); - if (float_uniform.is_valid() || int_uniform.is_valid()) { + if (color_uniform.is_valid()) { + custom_editor->call_deferred("_show_prop_names", true); + } + if (float_uniform.is_valid() || int_uniform.is_valid() || vec3_uniform.is_valid() || bool_uniform.is_valid() || transform_uniform.is_valid()) { custom_editor->call_deferred("_show_prop_names", true); continue; } @@ -2650,7 +2657,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("Texture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "texture"), "texture", VisualShaderNode::PORT_TYPE_SAMPLER, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("FragCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); - add_options.push_back(AddOption("LightAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_alpha"), "light_alpha", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("LightAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_alpha"), "light_alpha", VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightColor", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_color"), "light_color", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightHeight", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_height"), "light_height", VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightUV", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_uv"), "light_uv", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); @@ -2658,7 +2665,9 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("Normal", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "normal"), "normal", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("PointCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "point_coord"), "point_coord", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenUV", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "screen_uv"), "screen_uv", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("ShadowAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_alpha"), "shadow_alpha", VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ShadowColor", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_color"), "shadow_color", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("ShadowVec", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_vec"), "shadow_vec", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Texture", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "texture"), "texture", VisualShaderNode::PORT_TYPE_SAMPLER, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Extra", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "extra"), "extra", VisualShaderNode::PORT_TYPE_TRANSFORM, VisualShader::TYPE_VERTEX, Shader::MODE_CANVAS_ITEM)); diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 92f899a35d..a8aeb05150 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -553,11 +553,12 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { selection.sort_custom<Node::Comparator>(); - for (List<Node *>::Element *E = selection.back(); E; E = E->prev()) { + Node *add_below_node = selection.back()->get(); + + for (List<Node *>::Element *E = selection.front(); E; E = E->next()) { Node *node = E->get(); Node *parent = node->get_parent(); - Node *selection_tail = _get_selection_group_tail(node, selection); List<Node *> owned; node->get_owned_by(node->get_owner(), &owned); @@ -575,7 +576,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { dup->set_name(parent->validate_child_name(dup)); - editor_data->get_undo_redo().add_do_method(parent, "add_child_below_node", selection_tail, dup); + editor_data->get_undo_redo().add_do_method(parent, "add_child_below_node", add_below_node, dup); for (List<Node *>::Element *F = owned.front(); F; F = F->next()) { if (!duplimap.has(F->get())) { @@ -583,7 +584,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { continue; } Node *d = duplimap[F->get()]; - editor_data->get_undo_redo().add_do_method(d, "set_owner", selection_tail->get_owner()); + editor_data->get_undo_redo().add_do_method(d, "set_owner", node->get_owner()); } editor_data->get_undo_redo().add_do_method(editor_selection, "add_node", dup); editor_data->get_undo_redo().add_undo_method(parent, "remove_child", dup); @@ -593,6 +594,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { editor_data->get_undo_redo().add_do_method(ed, "live_debug_duplicate_node", edited_scene->get_path_to(node), dup->get_name()); editor_data->get_undo_redo().add_undo_method(ed, "live_debug_remove_node", NodePath(String(edited_scene->get_path_to(parent)).plus_file(dup->get_name()))); + + add_below_node = dup; } editor_data->get_undo_redo().commit_action(); @@ -600,7 +603,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (dupsingle) editor->push_item(dupsingle); - for (List<Node *>::Element *E = editable_children.front(); E; E = E->next()) + for (List<Node *>::Element *E = editable_children.back(); E; E = E->prev()) _toggle_editable_children(E->get()); } break; diff --git a/editor/translations/ar.po b/editor/translations/ar.po index 6181580a68..22358973a0 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -7,7 +7,7 @@ # Basil Al-Khateeb <basil.y.alkhateeb@gmail.com>, 2017. # Jamal Alyafei <jamal.qassim@gmail.com>, 2017. # john lennon <khoanantonio@outlook.com>, 2017. -# Mohammmad Khashashneh <mohammad.rasmi@gmail.com>, 2016. +# Mohammmad Khashashneh <mohammad.rasmi@gmail.com>, 2016, 2020. # Mr ChaosXD <mrchaosxd3@gmail.com>, 2018. # Mrwan Ashraf <mrwan.ashraf94@gmail.com>, 2017. # noureldin sharaf <sharaf.noureldin@yahoo.com>, 2017. @@ -35,12 +35,14 @@ # hshw <shw@tutanota.com>, 2020. # Youssef Harmal <the.coder.crab@gmail.com>, 2020. # Nabeel20 <nabeelandnizam@gmail.com>, 2020. +# merouche djallal <kbordora@gmail.com>, 2020. +# Airbus5717 <Abdussamadf350@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-27 08:24+0000\n" -"Last-Translator: Nabeel20 <nabeelandnizam@gmail.com>\n" +"PO-Revision-Date: 2020-05-05 14:01+0000\n" +"Last-Translator: Anonymous <noreply@weblate.org>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -49,12 +51,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "نوع معامل خاطئ للدالة convert()، إستخدم ثوابت TYPE_*." +msgstr "معامل type خاطئ لدالة Convert, استخدم احدى الثوابت من مجموعة TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -344,7 +346,7 @@ msgstr "التفاف الحلقة المثبتة" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "أدخل مفتاح" +msgstr "أدخل المفتاح" #: editor/animation_track_editor.cpp msgid "Duplicate Key(s)" @@ -594,11 +596,11 @@ msgstr "إحدف المحدد (المجموعة المختارة)" #: editor/animation_track_editor.cpp msgid "Go to Next Step" -msgstr "إذهب إلي الخطوة التالية" +msgstr "إذهب إلى الخطوة التالية" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "إذهب إلي الخطوة السابقة" +msgstr "إذهب إلى الخطوة السابقة" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -671,7 +673,7 @@ msgstr "إختر المقاطع المراد نسخها" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Copy" -msgstr "أنسخ" +msgstr "نسخ" #: editor/animation_track_editor.cpp msgid "Select All/None" @@ -754,13 +756,13 @@ msgstr "تحديد التبويب البرمجي" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom In" -msgstr "تقريب" +msgstr "تكبير" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Out" -msgstr "إبعاد" +msgstr "تصغير" #: editor/code_editor.cpp msgid "Reset Zoom" @@ -869,7 +871,7 @@ msgstr "إشارة غير قادر على الاتصال" #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Close" -msgstr "اغلاق" +msgstr "إغلاق" #: editor/connections_dialog.cpp msgid "Connect" @@ -1100,7 +1102,7 @@ msgstr "متصفح الموارد أورفان" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" -msgstr "مسح" +msgstr "حذف" #: editor/dependency_editor.cpp msgid "Owns" @@ -1716,9 +1718,8 @@ msgid "Current Profile:" msgstr "الملف (النسخة) الحالية:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Make Current" -msgstr "الحالي:" +msgstr "إجعل الحالي" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp @@ -1838,15 +1839,15 @@ msgstr "حفظ ملف" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "إرجع للخلف" +msgstr "الرجوع للخلف" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "إذهب للأمام" +msgstr "الذهاب للأمام" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "إذهب للأعلي" +msgstr "إذهب للأعلى" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" @@ -1866,51 +1867,43 @@ msgstr "مسار التركيز" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "حرك المُفضلة للأعلي" +msgstr "حرك المُفضلة للأعلى" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" msgstr "حرك المُفضلة للأسفل" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to previous folder." -msgstr "إذهب إلي المجلد السابق" +msgstr "إرجع إلي المجلد السابق." #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to next folder." -msgstr "إذهب إلي المجلد السابق" +msgstr "إذهب إلي المجلد التالي." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Go to parent folder." -msgstr "إذهب إلي المجلد السابق" +msgstr "إذهب إلي مجلد الأصل." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Refresh files." -msgstr "إبحث في الأصناف" +msgstr "حَدِّث الملفات." #: editor/editor_file_dialog.cpp -#, fuzzy msgid "(Un)favorite current folder." -msgstr "لا يمكن إنشاء المجلد." +msgstr "إضافة المجلد إلى المفضلة / إخراجه من المفضلة." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Toggle the visibility of hidden files." -msgstr "أظهر الملفات المخفية" +msgstr "إظهار/إخفاء الملفات المخفية." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "أظهر العناصر كشبكة من الصور المصغرة" +msgstr "أظهر العناصر كشبكة من الصور المصغرة." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a list." -msgstr "أظهر العناصر كقائمة" +msgstr "أظهر العناصر كقائمة." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" @@ -1963,12 +1956,11 @@ msgstr "مورث بواسطة:" #: editor/editor_help.cpp msgid "Description" -msgstr "الوصف:" +msgstr "الوصف" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials" -msgstr "الدورس علي الإنترنت:" +msgstr "التعليمات على الإنترنت" #: editor/editor_help.cpp msgid "Properties" @@ -1979,9 +1971,8 @@ msgid "override:" msgstr "يتجاوز:" #: editor/editor_help.cpp -#, fuzzy msgid "default:" -msgstr "الإفتراضي" +msgstr "الافتراضي:" #: editor/editor_help.cpp msgid "Methods" @@ -2000,14 +1991,12 @@ msgid "Constants" msgstr "الثوابت" #: editor/editor_help.cpp -#, fuzzy msgid "Property Descriptions" -msgstr "وصف الملكية:" +msgstr "أوصاف المُلكية" #: editor/editor_help.cpp -#, fuzzy msgid "(value)" -msgstr "القيمة:" +msgstr "(القيمة)" #: editor/editor_help.cpp msgid "" @@ -2018,9 +2007,8 @@ msgstr "" "المساهمة واحد [color=$color][url=$url]!" #: editor/editor_help.cpp -#, fuzzy msgid "Method Descriptions" -msgstr "وصف الطريقة:" +msgstr "أوصاف الدوال Method" #: editor/editor_help.cpp msgid "" @@ -2033,16 +2021,15 @@ msgstr "" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "إبحث في المساعدة" +msgstr "ابحث في المساعدة" #: editor/editor_help_search.cpp msgid "Case Sensitive" msgstr "حساسة لحالة الأحرف" #: editor/editor_help_search.cpp -#, fuzzy msgid "Show Hierarchy" -msgstr "أظهر المساعدات" +msgstr "اظهر التراتبية" #: editor/editor_help_search.cpp msgid "Display All" @@ -2069,9 +2056,8 @@ msgid "Properties Only" msgstr "خصائص فقط" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "خصائص" +msgstr "خصائص الموضوع Theme فقط" #: editor/editor_help_search.cpp msgid "Member Type" @@ -2079,35 +2065,31 @@ msgstr "نوع العضو" #: editor/editor_help_search.cpp msgid "Class" -msgstr "الصنف" +msgstr "الصف" #: editor/editor_help_search.cpp -#, fuzzy msgid "Method" -msgstr "قائمة الطرق" +msgstr "دالة" #: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Signal" -msgstr "إشارات" +msgstr "الإشاراة" #: editor/editor_help_search.cpp editor/plugins/theme_editor_plugin.cpp msgid "Constant" msgstr "ثابت" #: editor/editor_help_search.cpp -#, fuzzy msgid "Property" -msgstr "خصيصة:" +msgstr "خاصية" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Property" -msgstr "خصائص الثمة" +msgstr "خاصية الموضوع Theme" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" -msgstr "خصيصة:" +msgstr "خاصية:" #: editor/editor_inspector.cpp msgid "Set" @@ -2119,12 +2101,11 @@ msgstr "تحديد التكرار:" #: editor/editor_log.cpp msgid "Output:" -msgstr "الخرج:" +msgstr "المُخرجات:" #: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "حذف المُحدد" +msgstr "نسخ المُحدد" #: editor/editor_log.cpp editor/editor_network_profiler.cpp #: editor/editor_profiler.cpp editor/editor_properties.cpp @@ -2134,11 +2115,11 @@ msgstr "حذف المُحدد" #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Clear" -msgstr "خالي" +msgstr "مسح" #: editor/editor_log.cpp msgid "Clear Output" -msgstr "أخلاء الخرج" +msgstr "مسح المُخرجات" #: editor/editor_network_profiler.cpp editor/editor_node.cpp #: editor/editor_profiler.cpp @@ -2147,23 +2128,20 @@ msgstr "إيقاف" #: editor/editor_network_profiler.cpp editor/editor_profiler.cpp #: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp -#, fuzzy msgid "Start" -msgstr "بدء!" +msgstr "بدء" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "%s/s" msgstr "%s/s" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Down" -msgstr "تنزيل" +msgstr "أسفل" #: editor/editor_network_profiler.cpp msgid "Up" -msgstr "فوق" +msgstr "أعلى" #: editor/editor_network_profiler.cpp editor/editor_node.cpp msgid "Node" @@ -2260,7 +2238,7 @@ msgstr "ينشئ الصورة المصغرة" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "هذه العملية لا يمكنها الإكتمال من غير شجرة رئيسة." +msgstr "هذه العملية لا يمكنها الإكتمال من غير جذر شجرة ." #: editor/editor_node.cpp msgid "" @@ -2323,7 +2301,6 @@ msgstr "" "هذا النظام." #: editor/editor_node.cpp -#, fuzzy msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it won't be kept when saving the current scene." @@ -2340,7 +2317,6 @@ msgstr "" "الإستيراد ومن ثم أعد إستيراده." #: editor/editor_node.cpp -#, fuzzy msgid "" "This scene was imported, so changes to it won't be kept.\n" "Instancing it or inheriting will allow making changes to it.\n" @@ -2353,13 +2329,12 @@ msgstr "" "هذا النظام." #: editor/editor_node.cpp -#, fuzzy msgid "" "This is a remote object, so changes to it won't be kept.\n" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"هذا المصدر ينتمي إلي مشهد قد تم إستيراده، إذا لا يمكن تعديله.\n" +"هذا المصدر ينتمي إلي مشهد قد تم إستيراده، التعديلات لن تحفظ.\n" "من فضلك إقرأ التوثيق المرتبط بإستيراد المشاهد لكي تفهم بشكل أفضل كيفية عمل " "هذا النظام." @@ -2384,9 +2359,8 @@ msgid "Open Base Scene" msgstr "فتح مشهد أساسي" #: editor/editor_node.cpp -#, fuzzy msgid "Quick Open..." -msgstr "فتح سريع للمشهد..." +msgstr "فتح سريع ..." #: editor/editor_node.cpp msgid "Quick Open Scene..." @@ -2405,9 +2379,8 @@ msgid "Save changes to '%s' before closing?" msgstr "هل تريد حفظ التغييرات إلي'%s' قبل الإغلاق؟" #: editor/editor_node.cpp -#, fuzzy msgid "Saved %s modified resource(s)." -msgstr "فشل تحميل المورد." +msgstr "حفظت %s الموارد المعدلة." #: editor/editor_node.cpp msgid "A root node is required to save the scene." @@ -2471,7 +2444,7 @@ msgstr "تشغيل مشهد بسرعة..." #: editor/editor_node.cpp msgid "Quit" -msgstr "خروج" +msgstr "إنهاء" #: editor/editor_node.cpp msgid "Exit the editor?" @@ -2512,9 +2485,8 @@ msgid "Close Scene" msgstr "اغلاق المشهد" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "اغلاق المشهد" +msgstr "إعادة فتح المشهد" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2530,19 +2502,19 @@ msgid "Unable to load addon script from path: '%s'." msgstr "غير قادر علي تحميل كود الإضافة من المسار: '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"غير قادر علي تحميل كود الإضافة من المسار: '%s' الكود ليس في وضع الأداة." +"غير قادر علي تحميل كود الإضافة من المسار: '%s' يبدو أن الكود يوجد فيه " +"أخطاء , الرجاء مراجعة الكود." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "غير قادر علي تحميل كود الإضافة من المسار: '%s' النوع الأساسي ليس إضافة " -"للمُعدل." +"المُعدل." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." @@ -2615,24 +2587,20 @@ msgstr "الإفتراضي" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "أظهر في مدير الملفات" #: editor/editor_node.cpp -#, fuzzy msgid "Play This Scene" msgstr "تشغيل المشهد" #: editor/editor_node.cpp -#, fuzzy msgid "Close Tab" -msgstr "اغلاق" +msgstr "اغلاق التبويب" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "اغلاق" +msgstr "تراجع عن إغلاق التبويب" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2643,9 +2611,8 @@ msgid "Close Tabs to the Right" msgstr "أغلق التبويبات على اليمين" #: editor/editor_node.cpp -#, fuzzy msgid "Close All Tabs" -msgstr "اغلاق" +msgstr "اغلاق جميع نوافذ التبويب" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2688,9 +2655,8 @@ msgid "Go to previously opened scene." msgstr "اذهب الي المشهد المفتوح مسبقا." #: editor/editor_node.cpp -#, fuzzy msgid "Copy Text" -msgstr "نسخ المسار" +msgstr "نسخ النص" #: editor/editor_node.cpp msgid "Next tab" @@ -2729,7 +2695,6 @@ msgid "Save Scene" msgstr "حفظ المشهد" #: editor/editor_node.cpp -#, fuzzy msgid "Save All Scenes" msgstr "حفظ جميع المشاهد" @@ -2753,7 +2718,7 @@ msgstr "تراجع" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" -msgstr "إعادة" +msgstr "إعادة تراجع" #: editor/editor_node.cpp msgid "Revert Scene" @@ -2769,14 +2734,12 @@ msgid "Project" msgstr "مشروع" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "إعدادات المشروع" +msgstr "إعدادات المشروع..." #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Version Control" -msgstr "النسخة:" +msgstr "التحكم في الإصدار" #: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp msgid "Set Up Version Control" @@ -2787,31 +2750,28 @@ msgid "Shut Down Version Control" msgstr "إطفاء التحكم بالنسخة Version Control" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "تصدير" +msgstr "تصدير..." #: editor/editor_node.cpp msgid "Install Android Build Template..." msgstr "تحميل قالب البناء للأندرويد..." #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Data Folder" -msgstr "فتح مدير المشروع؟" +msgstr "فتح مجلد بيانات المشروع" #: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Tools" msgstr "ادوات" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "متصفح الموارد أورفان" +msgstr "متصفح الموارد أورفان..." #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "غادر الي قائمه المشاريع" +msgstr "غادر إلى قائمه المشاريع" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/project_export.cpp @@ -2908,56 +2868,48 @@ msgid "Editor" msgstr "المُعدل" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "إعدادات المُعدل" +msgstr "إعدادات المحرّر" #: editor/editor_node.cpp msgid "Editor Layout" msgstr "نسق المُعدل" #: editor/editor_node.cpp -#, fuzzy msgid "Take Screenshot" -msgstr "حفظ المشهد" +msgstr "أخذ صورة للشاشة" #: editor/editor_node.cpp -#, fuzzy msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "إعدادات المُعدل" +msgstr "لقطات الشاشة تكون محفوظة في مجلّد البيانات/الإعدادت داخل المحرّر" #: editor/editor_node.cpp msgid "Toggle Fullscreen" msgstr "إلغاء/تفعيل وضع الشاشة الكاملة" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle System Console" -msgstr "أظهر المود" +msgstr "إظهار/إخفاء وحدة التحكم بالنظام" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Data/Settings Folder" -msgstr "إعدادات المُعدل" +msgstr "فتح مجلّد البيانات/الإعدادت المحرّر" #: editor/editor_node.cpp msgid "Open Editor Data Folder" msgstr "افتح ملف بيانات المحرر" #: editor/editor_node.cpp -#, fuzzy msgid "Open Editor Settings Folder" -msgstr "إعدادات المُعدل" +msgstr "فتح مجلّد إعدادات المحرّر" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "إدارة قوالب التصدير" +msgstr "إدارة ميّزات المحرّر" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "إدارة قوالب التصدير" +msgstr "إدارة قوالب التصدير..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2982,9 +2934,8 @@ msgid "Q&A" msgstr "الأسئلة و الأجوبة" #: editor/editor_node.cpp -#, fuzzy msgid "Report a Bug" -msgstr "إعادة إستيراد" +msgstr "إرسال تقرير عن bug أو خلل في شيء ما" #: editor/editor_node.cpp msgid "Send Docs Feedback" @@ -3040,24 +2991,20 @@ msgstr "تعديل معرّف الفيديو video driver يتطلب إعادة #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Save & Restart" -msgstr "حفظ و خروج" +msgstr "حفظ و إعادة تشغيل" #: editor/editor_node.cpp -#, fuzzy msgid "Spins when the editor window redraws." -msgstr "يدور حينما نافذة المُعدل يتم إعادة دهانة!" +msgstr "يدور حينما يتم إعادة رسم نافذة المحرّر" #: editor/editor_node.cpp -#, fuzzy msgid "Update Continuously" -msgstr "متواصل" +msgstr "تحديث متواصل" #: editor/editor_node.cpp -#, fuzzy msgid "Update When Changed" -msgstr "تحديث التغييرات" +msgstr "تحديث عند التغيير" #: editor/editor_node.cpp #, fuzzy @@ -3073,9 +3020,8 @@ msgid "Inspector" msgstr "مُراقب" #: editor/editor_node.cpp -#, fuzzy msgid "Expand Bottom Panel" -msgstr "توسيع الكل" +msgstr "توسيع التبويب السفلي" #: editor/editor_node.cpp msgid "Output" @@ -3090,9 +3036,8 @@ msgid "Android build template is missing, please install relevant templates." msgstr "قالب البناء الخاص بالأندرويد مفقود، من فضلك نزل قوالب ذات صلة." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Templates" -msgstr "إدارة قوالب التصدير" +msgstr "إدارة القوالب" #: editor/editor_node.cpp msgid "" @@ -3128,9 +3073,8 @@ msgid "Import Templates From ZIP File" msgstr "إستيراد القوالب من ملف مضغوط بصيغة Zip" #: editor/editor_node.cpp -#, fuzzy msgid "Template Package" -msgstr "تصدير مدير القوالب" +msgstr "رزمة القوالب" #: editor/editor_node.cpp msgid "Export Library" @@ -3181,12 +3125,10 @@ msgid "Open the previous Editor" msgstr "إفتح المُعدل السابق" #: editor/editor_node.h -#, fuzzy msgid "Warning!" -msgstr "تحذيرات" +msgstr "تحذيرات!" #: editor/editor_path.cpp -#, fuzzy msgid "No sub-resources found." msgstr "لا مصدر للسطح تم تحديده." @@ -3199,14 +3141,12 @@ msgid "Thumbnail..." msgstr "الصورة المصغرة..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Main Script:" -msgstr "فتح الكود" +msgstr "النص البرمجي الأصلي :" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit Plugin" -msgstr "تعديل البولي" +msgstr "تعديل الإضافة" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -3230,9 +3170,8 @@ msgid "Status:" msgstr "الحالة:" #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Edit:" -msgstr "المُعدل" +msgstr "تحرير:" #: editor/editor_profiler.cpp msgid "Measure:" @@ -5709,7 +5648,7 @@ msgstr "نصف المُحدد" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "إملئ الشاشة بالمحدد" +msgstr "تحديد الإطار" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" @@ -6144,6 +6083,10 @@ msgid "" "This can be used instead of the SpatialMaterial Grow property when using " "that property isn't possible." msgstr "" +"يُنشى سطحاً مخططاً outline mesh سكونياً. هذا السطح تكون قيمه الطبيعية مقلوبة " +"بصورة تلقائية.\n" +"يمكن أن يستخدم بدلاً من خاصية التمدد (Grow ) لمادة الحيز المكاني " +"SpatialMaterial عندما يكون استخدام هذه الخاصية غير مقدور عليه." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -6865,7 +6808,7 @@ msgstr "%s مرجعية الصف Class" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find Next" -msgstr "ابحث عن التالي" +msgstr "إيجاد التالي" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -6898,7 +6841,7 @@ msgstr "تحريك لأعلى" #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "تحرك لأسفل" +msgstr "تحريك لأسفل" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -6922,7 +6865,7 @@ msgstr "إعادة فتح النص البرمجي المُغلق" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "احفظ الكل" +msgstr "إحفظ الكل" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -6934,11 +6877,11 @@ msgstr "نسخ مسار النص البرمجي" #: editor/plugins/script_editor_plugin.cpp msgid "History Previous" -msgstr "التأريخ السابق" +msgstr "التاريخ السابق" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "التأريخ التالي" +msgstr "التاريخ التالي" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6971,11 +6914,11 @@ msgstr "تشغيل" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "خطوة ضمن" +msgstr "اخط خطوة ضمن" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "خطوة متجاوزة" +msgstr "اخط خطوة متجاوزة" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" @@ -7473,7 +7416,7 @@ msgstr "عرض المُخطط Wireframe" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "" +msgstr "عرض تراكبات الرسم Overdraw" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" @@ -7651,27 +7594,27 @@ msgstr "نافذة التحويلات ..." #: editor/plugins/spatial_editor_plugin.cpp msgid "1 Viewport" -msgstr "إطار عرض واحد 1" +msgstr "ساحة رؤية واحدة" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports" -msgstr "إطاري عرض" +msgstr "ساحتان للرؤية" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "إطاري عرض (Alt)" +msgstr "ساحتان للرؤية (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" -msgstr "3 إطارات عرض" +msgstr "3 ساحات للرؤية" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "3 إطارات عرض (Alt)" +msgstr "3 ساحات للرؤية (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" -msgstr "4 إطارات عرض" +msgstr "4 ساحات للرؤية" #: editor/plugins/spatial_editor_plugin.cpp msgid "Gizmos" @@ -8283,7 +8226,7 @@ msgstr "القلب أفقياً" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip Vertically" -msgstr "القلب شاقولياً" +msgstr "القلب عموديًا" #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy @@ -8322,7 +8265,7 @@ 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." @@ -8704,11 +8647,11 @@ msgstr "إظهار آخر تعديلات الملف قبل قبولهم في آ #: editor/plugins/version_control_editor_plugin.cpp msgid "No file diff is active" -msgstr "" +msgstr "لا ملف فروق نشط" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect changes in file diff" -msgstr "" +msgstr "الكشف عن التغييرات في ملف الفروق" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" @@ -8861,7 +8804,7 @@ msgstr "مُشغل الفارق." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Dodge operator." -msgstr "" +msgstr "مُشغل التملص Dodge." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "HardLight operator." @@ -9438,7 +9381,7 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides vector by vector." -msgstr "" +msgstr "يُقسّم المُتجه (الشعاع) على المُتجه." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by vector." @@ -9863,10 +9806,10 @@ msgid "" "Incompatible with older hardware\n" "Not recommended for web games" msgstr "" -"قيمة بصرية أعلى\n" -"جميع المزايا متوافرة\n" -"غير متوافق مع العتاد القديم\n" -"ليس نصحية بالنسبة لألعاب الويب" +"جودة بصرية أعلى\n" +"جميع الميزات المتاحة\n" +"غير متوافق مع الأجهزة القديمة\n" +"لا ينصح به لألعاب الويب" #: editor/project_manager.cpp msgid "OpenGL ES 2.0" @@ -9879,15 +9822,14 @@ msgid "" "Works on most hardware\n" "Recommended for web games" msgstr "" -"قيمة بصرية أقل\n" -"بعض المزايا غير متوافرة \n" -"يعمل على أغلب العتاد\n" -"نصيحة لألعاب الويب" +"جودة بصرية أقل\n" +"بعض الميزات غير متوفرة \n" +"يعمل على معظم الأجهزة\n" +"يوصى به لألعاب الويب" #: editor/project_manager.cpp msgid "Renderer can be changed later, but scenes may need to be adjusted." -msgstr "" -"مُحرك الإخراج البصري يمكن تغييره لاحقاً، ولكن قد تحتاج إلى تعديل المشاهد." +msgstr "يمكن تعديل جهاز العرض لاحقاً، ولكن قد تحتاج المشاهد إلى تعديل." #: editor/project_manager.cpp msgid "Unnamed Project" @@ -9899,7 +9841,7 @@ msgstr "مشروع مفقود" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "خطأ: المشروع مفقود في ملفات النظام." +msgstr "خطأ: المشروع مفقود في نظام الملفات." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -10168,11 +10110,11 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "" +msgstr "مسح حدث إجراء الإضافة" #: editor/project_settings_editor.cpp msgid "Add Event" -msgstr "" +msgstr "إضافة حَدث" #: editor/project_settings_editor.cpp msgid "Button" @@ -10180,61 +10122,63 @@ msgstr "زر" #: editor/project_settings_editor.cpp msgid "Left Button." -msgstr "" +msgstr "الزر الأيسر." #: editor/project_settings_editor.cpp msgid "Right Button." -msgstr "" +msgstr "الزر الأيمن." #: editor/project_settings_editor.cpp msgid "Middle Button." -msgstr "" +msgstr "الزر الأوسط." #: editor/project_settings_editor.cpp msgid "Wheel Up." -msgstr "" +msgstr "العجلة نحو الأقصى." #: editor/project_settings_editor.cpp msgid "Wheel Down." -msgstr "" +msgstr "العجلة نحو الأدنى." #: editor/project_settings_editor.cpp msgid "Add Global Property" -msgstr "" +msgstr "إضافة خاصية شمولية" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "" +msgstr "اختر عنصر إعدادات بدايةً!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." -msgstr "" +msgstr "لا خاصية '%s' موجودة." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "" +msgstr "الإعداد '%s' ضمني، ولا يمكن حذفه." #: editor/project_settings_editor.cpp msgid "Delete Item" -msgstr "" +msgstr "حذف العُنصر" #: editor/project_settings_editor.cpp msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" +"اسم إجراء غير صالح. لا يجوز أن يكون الاسم فارغاً أو متضمناً '/'، ':'،'='، '\\' " +"أو'\"'." #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "" +msgstr "إضافة إجراء إدخال" #: editor/project_settings_editor.cpp msgid "Error saving settings." -msgstr "" +msgstr "خطأ في حفظ الإعدادات." #: editor/project_settings_editor.cpp msgid "Settings saved OK." -msgstr "" +msgstr "تيسّر حفظ الإعدادات." #: editor/project_settings_editor.cpp #, fuzzy @@ -10243,19 +10187,19 @@ msgstr "حرك النقطة داخل المنحنى" #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "التجاوز للميزة" #: editor/project_settings_editor.cpp msgid "Add Translation" -msgstr "" +msgstr "إضافة ترجمة" #: editor/project_settings_editor.cpp msgid "Remove Translation" -msgstr "" +msgstr "إزالة الترجمة" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "" +msgstr "إضافة مسار مُعاد تعيينه Remapped" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" @@ -10275,7 +10219,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter" -msgstr "" +msgstr "مُرشح محلي مُعدّل" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter Mode" @@ -10283,7 +10227,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Project Settings (project.godot)" -msgstr "" +msgstr "إعدادات المشروع (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" @@ -10291,47 +10235,47 @@ msgstr "بشكل عام" #: editor/project_settings_editor.cpp msgid "Override For..." -msgstr "" +msgstr "تجاوز لأجل..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "The editor must be restarted for changes to take effect." -msgstr "" +msgstr "لكي يظهر تأثير التغييرات ينبغي إعادة تشغيل المُحرر." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "" +msgstr "خريطة الإدخال" #: editor/project_settings_editor.cpp msgid "Action:" -msgstr "" +msgstr "إجراء:" #: editor/project_settings_editor.cpp msgid "Action" -msgstr "الفعل" +msgstr "إجراء" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "الحيز الميّت" #: editor/project_settings_editor.cpp msgid "Device:" -msgstr "" +msgstr "الجهاز:" #: editor/project_settings_editor.cpp msgid "Index:" -msgstr "" +msgstr "الفهرس:" #: editor/project_settings_editor.cpp msgid "Localization" -msgstr "" +msgstr "توطين" #: editor/project_settings_editor.cpp msgid "Translations" -msgstr "" +msgstr "الترجمات" #: editor/project_settings_editor.cpp msgid "Translations:" -msgstr "" +msgstr "الترجمات:" #: editor/project_settings_editor.cpp msgid "Remaps" @@ -10339,41 +10283,39 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Resources:" -msgstr "" +msgstr "الموارد:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "" +msgstr "إعادة تعيين الخرائط محلياً:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "" +msgstr "محلي" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "" +msgstr "مُرشح المحليّات Locales" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show All Locales" -msgstr "إظهار العظام" +msgstr "إظهار جميع المَحليّات Locales" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show Selected Locales Only" -msgstr "المحدد فقط" +msgstr "إظهار المَحليّات المُختارة فحسب" #: editor/project_settings_editor.cpp msgid "Filter mode:" -msgstr "وضع المُصفي:" +msgstr "وضع المُرشح:" #: editor/project_settings_editor.cpp msgid "Locales:" -msgstr "" +msgstr "مَحليّات:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "" +msgstr "تحميل تلقائي" #: editor/project_settings_editor.cpp msgid "Plugins" @@ -10385,19 +10327,19 @@ msgstr "إعداد مُسبق..." #: editor/property_editor.cpp msgid "Zero" -msgstr "" +msgstr "صفر" #: editor/property_editor.cpp msgid "Easing In-Out" -msgstr "" +msgstr "تسارع بعد بداية بطيئة" #: editor/property_editor.cpp msgid "Easing Out-In" -msgstr "" +msgstr "تباطؤ بعد بداية سريعة" #: editor/property_editor.cpp msgid "File..." -msgstr "" +msgstr "ملف..." #: editor/property_editor.cpp msgid "Dir..." @@ -10405,31 +10347,31 @@ msgstr "" #: editor/property_editor.cpp msgid "Assign" -msgstr "" +msgstr "ألحق" #: editor/property_editor.cpp msgid "Select Node" -msgstr "" +msgstr "اختر عُقدة" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "" +msgstr "خطأ في تحميل الملف: ليس مورداً!" #: editor/property_editor.cpp msgid "Pick a Node" -msgstr "" +msgstr "اختر عُقدة" #: editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "" +msgstr "Bit %d، قيمة%d." #: editor/property_selector.cpp msgid "Select Property" -msgstr "" +msgstr "انتقاء الخاصية" #: editor/property_selector.cpp msgid "Select Virtual Method" -msgstr "إختر طريقة إفتراضية" +msgstr "اختر الطريقة الإفتراضية" #: editor/property_selector.cpp msgid "Select Method" @@ -10442,24 +10384,23 @@ msgstr "إعادة التسمية" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "بادئة" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "لاحقة" #: editor/rename_dialog.cpp msgid "Use Regular Expressions" msgstr "استخدام التعبيرات الاعتيادية Regular Expressions" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced Options" -msgstr "إعدادات الكبس" +msgstr "إعدادات مُتقدمة" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "استبدال" #: editor/rename_dialog.cpp #, fuzzy @@ -10468,40 +10409,39 @@ msgstr "إسم العقدة:" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "اسم العُقدة الأب، إن توافر" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "إسم العقدة:" +msgstr "نوع العُقدة" #: editor/rename_dialog.cpp -#, fuzzy msgid "Current scene name" -msgstr "لم يتم حفظ المشهد الحالي. إفتحه علي أية حال؟" +msgstr "اسم المشهد الحالي" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "إعادة التسمية" +msgstr "اسم العُقدة الرئيسة (الجذر)" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"عداد الأعداد الصحيحة التسلسلية.\n" +"يقارن إعدادات العداد." #: editor/rename_dialog.cpp msgid "Per-level Counter" -msgstr "" +msgstr "العداد وفق-المستوى" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "إذا تم تحديده فإن العداد سيعيد البدء لكل مجموعة من العُقد الأبناء" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "القيمة المبدئية للعداد" #: editor/rename_dialog.cpp #, fuzzy @@ -10510,7 +10450,7 @@ msgstr "خطوة (ثانية):" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" -msgstr "" +msgstr "مقدار الزيادة للعداد لكل عُقدة" #: editor/rename_dialog.cpp msgid "Padding" @@ -10524,31 +10464,31 @@ msgstr "" #: editor/rename_dialog.cpp msgid "Post-Process" -msgstr "" +msgstr "المعالجة-اللاحقة Post-Process" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "" +msgstr "احتفظ" #: editor/rename_dialog.cpp msgid "PascalCase to snake_case" -msgstr "" +msgstr "حالة أحرف PascalCase إلى snake_case" #: editor/rename_dialog.cpp msgid "snake_case to PascalCase" -msgstr "" +msgstr "حالة أحرف snake_case إلى PascalCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "حالة" #: editor/rename_dialog.cpp msgid "To Lowercase" -msgstr "" +msgstr "لأحرف صغيرة Lowercase" #: editor/rename_dialog.cpp msgid "To Uppercase" -msgstr "" +msgstr "لأحرف كبيرة Uppercase" #: editor/rename_dialog.cpp #, fuzzy @@ -10557,7 +10497,7 @@ msgstr "إرجاع التكبير" #: editor/rename_dialog.cpp msgid "Regular Expression Error" -msgstr "" +msgstr "خطأ ذو علاقة بالتعبير الاعتيادي Regular Expression" #: editor/rename_dialog.cpp msgid "At character %s" @@ -10565,65 +10505,65 @@ msgstr "عند الحرف %s" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "" +msgstr "إعادة اختيار أبوة العُقدة" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "" +msgstr "إعادة اختيار أبوة المكان (اختر أب جديد):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "" +msgstr "الاحتفاظ بالتحوّل الشمولي Global" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" -msgstr "" +msgstr "إعادة اختيار الأبوة" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "" +msgstr "وضع التشغيل:" #: editor/run_settings_dialog.cpp msgid "Current Scene" -msgstr "" +msgstr "المشهد الحالي" #: editor/run_settings_dialog.cpp msgid "Main Scene" -msgstr "" +msgstr "المشهد الرئيس" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "" +msgstr "معاملات المشهد الرئيس:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "" +msgstr "إعدادت تشغيل المشهد" #: editor/scene_tree_dock.cpp msgid "No parent to instance the scenes at." -msgstr "" +msgstr "لا أب لنمذجة المشاهد عنده." #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "" +msgstr "خطأ في تحميل المشهد من %s" #: editor/scene_tree_dock.cpp msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." -msgstr "" +msgstr "لا يمكن نمذجة المشهد '%s' لأن المشهد الحالي مُتضَمن في واحد من عُقده." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" -msgstr "" +msgstr "نمذجة المشهد(المشاهد)" #: editor/scene_tree_dock.cpp msgid "Replace with Branch Scene" -msgstr "" +msgstr "استبدال بمشهد فرعي" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "" +msgstr "نمذجة المشهد الابن" #: editor/scene_tree_dock.cpp msgid "Clear Script" @@ -10631,31 +10571,33 @@ msgstr "إخلاء الكود" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "" +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)" -msgstr "" +msgstr "مضاعفة العُقدة(العُقد)" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" +"لا يمكن إعادة اختيار أبوة العُقدة في المشاهد الموروثة، لا يمكن تغيير ترتيب " +"العُقد." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "" +msgstr "لكي تصبح هذه العُقدة رئيسة (جذر) عليها أن تنتمي إلى المشهد المُحرر." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "" +msgstr "لا يمكن أن تصبح المشاهد المنمذجة مشاهد رئيسة (جذر)" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10669,11 +10611,11 @@ msgstr "إنشاء عقدة" #: editor/scene_tree_dock.cpp msgid "Delete the root node \"%s\"?" -msgstr "" +msgstr "حذف العُقدة الرئيسة (الجذر) \"%s\"؟" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "حذف العُقدة \"%s\" مع جميع أبنائها؟" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10682,56 +10624,56 @@ msgstr "إنشاء عقدة" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "" +msgstr "لا يمكن التنفيذ مع العُقدة الرئيسة (الجذر)." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "" +msgstr "لا يمكن تنفيذ هذا الإجراء على المشاهد المُنمذجة." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." -msgstr "" +msgstr "احفظ المشهد الجديد كـ..." #: editor/scene_tree_dock.cpp msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"سيسبب تعطيل خاصية \"النمذجة_المُحررة\" \"editable_instance\" عودة قيم العُقد " +"إلى القيم الافتراضية لها." #: editor/scene_tree_dock.cpp msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" +"سيسبب تمكين \"التحميل كعنصر نائب\" \"Load As Placeholder\" تعطيل \"ابن قابل " +"للتحرير\" \"Editable Children\" والذي ينجم عنه عودة قيم جميع العُقد إلى قيمها " +"الافتراضية." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Make Local" -msgstr "أنشئ عظام" +msgstr "اجعله محلياً" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "New Scene Root" -msgstr "حفظ المشهد" +msgstr "مشهد رئيس (جذر) جديد" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "إنشاء عقدة" +msgstr "إنشاء العُقدة الرئيسة (الجذر):" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "مشهد" +msgstr "مشهد ثنائي البُعد" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "مشهد" +msgstr "مشهد ثلاثي الأبعاد" #: editor/scene_tree_dock.cpp msgid "User Interface" -msgstr "" +msgstr "واجهة المستخدم" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10740,37 +10682,37 @@ msgstr "إنشاء عقدة" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "" +msgstr "لا يمكن تنفيذ الإجراء على عُقدة من مشهد أجنبي!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "" +msgstr "لا يمكن تنفيذ الإجراء على عُقد يرثها المشهد الحالي!" #: editor/scene_tree_dock.cpp msgid "Attach Script" -msgstr "" +msgstr "إلحاق نص برمجي" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "" +msgstr "إزالة عُقدة (عُقد)" #: editor/scene_tree_dock.cpp msgid "Change type of node(s)" -msgstr "" +msgstr "تغيير نوع العُقدة(العُقد)" #: editor/scene_tree_dock.cpp msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." -msgstr "" +msgstr "لم ينجح حفظ المشهد الجديد. غالباً لا يمكن إشباع التبعات (النماذج)." #: editor/scene_tree_dock.cpp msgid "Error saving scene." -msgstr "" +msgstr "خطأ في حفظ المشهد." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "" +msgstr "خطأ في مضاعفة المشهد لحفظه." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" @@ -10778,15 +10720,15 @@ msgstr "مورد فرعي" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" -msgstr "" +msgstr "مسح الميراث" #: editor/scene_tree_dock.cpp msgid "Editable Children" -msgstr "" +msgstr "أبناء قابلين للتعديل" #: editor/scene_tree_dock.cpp msgid "Load As Placeholder" -msgstr "" +msgstr "تحميله كعنصر نائب" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10795,7 +10737,7 @@ msgstr "فُتح مؤخراً" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "" +msgstr "إضافة عُقدة ابن" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10804,7 +10746,7 @@ msgstr "طوي الكل" #: editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "" +msgstr "تغيير النوع" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10818,19 +10760,19 @@ msgstr "حفظ المشهد" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "" +msgstr "دمج من المشهد" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" -msgstr "" +msgstr "حفظ الفرع كمشهد" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" -msgstr "" +msgstr "نسخ مسار العُقدة" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" -msgstr "" +msgstr "حذف (دون تأكيد)" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10842,14 +10784,16 @@ msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" +"نمذجة ملف المشهد كعُقدة. إن لم يكن هناك عُقدة رئيسة (جذر) سيتم إنشاء مشهد " +"موروث." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "" +msgstr "إلحاق نص برمجي موجود أو جديد للعُقدة المختارة." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "" +msgstr "مسح النص البرمجي للعُقدة المختارة." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -10857,11 +10801,11 @@ msgstr "عن بعد" #: editor/scene_tree_dock.cpp msgid "Local" -msgstr "" +msgstr "محلي" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "" +msgstr "مسح الموروث؟ (لا تراجع!)" #: editor/scene_tree_editor.cpp #, fuzzy @@ -11235,11 +11179,11 @@ msgstr "" #: editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "" +msgstr "التحديد من الشجرة" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "" +msgstr "تصدير القياسات ك CSV" #: editor/settings_config_dialog.cpp #, fuzzy @@ -11248,7 +11192,7 @@ msgstr "تخفيف للخارج" #: editor/settings_config_dialog.cpp msgid "Restore Shortcut" -msgstr "" +msgstr "إعادة تعيين الاختصارات" #: editor/settings_config_dialog.cpp #, fuzzy @@ -11261,15 +11205,15 @@ msgstr "إعدادات المُعدل" #: editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "" +msgstr "الاختصارات" #: editor/settings_config_dialog.cpp msgid "Binding" -msgstr "" +msgstr "الربط" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" -msgstr "" +msgstr "تغيير نصف قطر الإنارة" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" @@ -11555,9 +11499,8 @@ msgid "Clear Selection" msgstr "إخلاء المحدد" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Fill Selection" -msgstr "كُل المُحدد" +msgstr "تعبئة المُحدد" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 3f5c140428..aaa46da54d 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -7,12 +7,13 @@ # Tahmid Karim <tahmidk15@gmail.com>, 2016. # Tawhid H. <Tawhidk757@yahoo.com>, 2019. # Hasibul Hasan <hasibeng78@gmail.com>, 2019. +# Oymate <dhruboadittya96@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-12-13 09:38+0000\n" -"Last-Translator: Hasibul Hasan <hasibeng78@gmail.com>\n" +"PO-Revision-Date: 2020-05-04 15:11+0000\n" +"Last-Translator: Anonymous <noreply@weblate.org>\n" "Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/" "godot/bn/>\n" "Language: bn\n" @@ -20,7 +21,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-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -29,7 +30,7 @@ msgstr "অবৈধ প্রকার রূপান্তর করার #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "১ (একটি অক্ষর) দৈর্ঘ্য এর স্ট্রিং প্রত্যাশিত।" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp diff --git a/editor/translations/de.po b/editor/translations/de.po index 86e7d09671..c3b2d6ee58 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -53,8 +53,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-20 05:51+0000\n" -"Last-Translator: anonymous <noreply@weblate.org>\n" +"PO-Revision-Date: 2020-05-04 15:11+0000\n" +"Last-Translator: Anonymous <noreply@weblate.org>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -62,7 +62,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -3001,7 +3001,7 @@ msgstr "Dokumentationsvorschläge senden" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "Community" +msgstr "Gemeinschaft" #: editor/editor_node.cpp msgid "About" @@ -10002,6 +10002,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"Die Suchmaske filtert Projekte nach ihrem Namen oder der letzten Komponente " +"ihres Pfadnamens.\n" +"Um den Filter auf den gesamten Pfadnamen anzuwenden muss mindestens ein ‚/‘-" +"Zeichen in der Suchanfrage vorhanden sein." #: editor/project_settings_editor.cpp msgid "Key " @@ -11123,9 +11127,8 @@ msgid "Total:" msgstr "Insgesamt:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Profil exportieren" +msgstr "Liste als CSV-Datei exportieren" #: editor/script_editor_debugger.cpp msgid "Resource Path" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index dc10209d18..d75cb88920 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -7,18 +7,19 @@ # Teashrock <kajitsu22@gmail.com>, 2019. # Brandon Dyer <brandondyer64@gmail.com>, 2019. # Alejandro Sánchez Medina <alejandrosanchzmedina@gmail.com>, 2019. +# Sr Half <flavio05@outlook.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2019-11-11 14:19+0000\n" -"Last-Translator: Alejandro Sánchez Medina <alejandrosanchzmedina@gmail.com>\n" +"PO-Revision-Date: 2020-05-01 11:43+0000\n" +"Last-Translator: Sr Half <flavio05@outlook.com>\n" "Language-Team: Esperanto <https://hosted.weblate.org/projects/godot-engine/" "godot/eo/>\n" "Language: eo\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.10-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -27,7 +28,7 @@ msgstr "Nevalida tip-argumento por funkcio convert(). Uzu konstantojn TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "Atendas ĉenon de longo 1 (unu karaktero)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -65,31 +66,31 @@ msgstr "En voko al '%s':" #: core/ustring.cpp msgid "B" -msgstr "" +msgstr "B" #: core/ustring.cpp msgid "KiB" -msgstr "" +msgstr "Kib" #: core/ustring.cpp msgid "MiB" -msgstr "" +msgstr "MiB" #: core/ustring.cpp msgid "GiB" -msgstr "" +msgstr "Gib" #: core/ustring.cpp msgid "TiB" -msgstr "" +msgstr "TiB" #: core/ustring.cpp msgid "PiB" -msgstr "" +msgstr "PiB" #: core/ustring.cpp msgid "EiB" -msgstr "" +msgstr "EiB" #: editor/animation_bezier_editor.cpp msgid "Free" @@ -422,7 +423,7 @@ msgstr "Ĝi ne estas ebla adici novan vojeton sen radiko" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" -msgstr "" +msgstr "Nevalida trako por Bezier (neniu taŭga subproprietaĵoj)" #: editor/animation_track_editor.cpp msgid "Add Bezier Track" @@ -12285,7 +12286,7 @@ msgstr "" #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." -msgstr "" +msgstr "Konstantoj ne povas esti modifitaj." #, fuzzy #~ msgid "Help improve the Godot documentation by giving feedback." diff --git a/editor/translations/es.po b/editor/translations/es.po index 933cff80a4..8446ed2415 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -45,11 +45,12 @@ # Julián Luini <jluini@gmail.com>, 2020. # Victor S. <victorstancioiu@gmail.com>, 2020. # henry rujano herrera <rujhen@gmail.com>, 2020. +# Megamega53 <Christopher.Morales21@myhunter.cuny.edu>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-23 20:21+0000\n" +"PO-Revision-Date: 2020-05-04 15:11+0000\n" "Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" @@ -58,7 +59,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -617,11 +618,11 @@ msgstr "Eliminar Selección" #: editor/animation_track_editor.cpp msgid "Go to Next Step" -msgstr "Ir al Paso Siguiente" +msgstr "Ir al Siguiente Paso" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "Ir al Paso Anterior" +msgstr "Ir al Anterior Paso" #: editor/animation_track_editor.cpp msgid "Optimize Animation" @@ -2043,7 +2044,7 @@ msgstr "" #: editor/editor_help.cpp msgid "Method Descriptions" -msgstr "Descripción de Métodos" +msgstr "Descripciones de Métodos" #: editor/editor_help.cpp msgid "" @@ -2691,7 +2692,7 @@ msgstr "Posición del Dock" #: editor/editor_node.cpp msgid "Distraction Free Mode" -msgstr "Modo sin distracciones" +msgstr "Modo Sin Distracciones" #: editor/editor_node.cpp msgid "Toggle distraction-free mode." @@ -2715,11 +2716,11 @@ msgstr "Copiar Texto" #: editor/editor_node.cpp msgid "Next tab" -msgstr "Pestaña siguiente" +msgstr "Siguiente pestaña" #: editor/editor_node.cpp msgid "Previous tab" -msgstr "Pestaña anterior" +msgstr "Anterior pestaña" #: editor/editor_node.cpp msgid "Filter Files..." @@ -5428,7 +5429,7 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Reset" -msgstr "Resetear el Zoom" +msgstr "Resetear Zoom" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5456,17 +5457,17 @@ msgstr "Alt + Clic Derecho: Selección en listado de solapamientos" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Move Mode" -msgstr "Modo Movimiento" +msgstr "Modo de Movimiento" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode" -msgstr "Modo Rotación" +msgstr "Modo de Rotación" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode" -msgstr "Modo Escalado" +msgstr "Modo de Escalado" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5488,7 +5489,7 @@ msgstr "Modo desplazamiento lateral" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Ruler Mode" -msgstr "Modo Regla" +msgstr "Modo de Regla" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Toggle smart snapping." @@ -5679,7 +5680,7 @@ msgstr "Clave de animación y Opciones de Pose" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "Insertar clave (pistas existentes)" +msgstr "Insertar Clave (Pistas Existentes)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -6035,7 +6036,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Collision Sibling" -msgstr "Crear Colisión Convexa Única Hermana" +msgstr "Crear Collider Convexo Único Hermano" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6047,7 +6048,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Multiple Convex Collision Siblings" -msgstr "Crear Múltiples Colisiones Convexas Hermanas" +msgstr "Crear Múltiples Collider Convexos Hermanos" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -6855,7 +6856,7 @@ msgstr "Guardar Todo" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" -msgstr "Recargar parcialmente el script" +msgstr "Recargar Parcialmente el Script" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" @@ -6863,7 +6864,7 @@ msgstr "Copiar Ruta del Script" #: editor/plugins/script_editor_plugin.cpp msgid "History Previous" -msgstr "Previo en Historial" +msgstr "Previo en el Historial" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" @@ -6900,11 +6901,11 @@ msgstr "Ejecutar" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" -msgstr "Step Into" +msgstr "Entrar En" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Over" -msgstr "Step Over" +msgstr "Salir de Aquí" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" @@ -7112,15 +7113,15 @@ msgstr "Eliminar Espacios Sobrantes al Final" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Spaces" -msgstr "Convertir Indentación en Espacios" +msgstr "Convertir Sangría en Espacios" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Tabs" -msgstr "Convertir Indentación en Tabulaciones" +msgstr "Convertir Sangría en Tabulaciones" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "Autoindentar" +msgstr "Auto Sangría" #: editor/plugins/script_text_editor.cpp msgid "Find in Files..." @@ -7140,7 +7141,7 @@ msgstr "Ir al Siguiente Marcador" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Bookmark" -msgstr "Ir al Marcador Anterior" +msgstr "Ir al Anterior Marcador" #: editor/plugins/script_text_editor.cpp msgid "Remove All Bookmarks" @@ -7157,19 +7158,19 @@ msgstr "Ir a Línea..." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Toggle Breakpoint" -msgstr "Act./Desact. Breakpoint" +msgstr "Cambiar Punto de Ruptura" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "Eliminar Todos los Breakpoints" +msgstr "Eliminar Todos los Puntos de Ruptura" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" -msgstr "Ir al Siguiente Breakpoint" +msgstr "Ir al Siguiente Punto de Ruptura" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Breakpoint" -msgstr "Ir al Breakpoint Anterior" +msgstr "Ir al Anterior Punto de Ruptura" #: editor/plugins/shader_editor_plugin.cpp msgid "" @@ -7349,11 +7350,11 @@ msgstr "Detrás" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" -msgstr "Alinear Transform con Vista" +msgstr "Alinear la Transformación con la Vista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Rotation with View" -msgstr "Alinear Rotación con Vista" +msgstr "Alinear la Rotación con la Vista" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." @@ -7437,7 +7438,7 @@ msgstr "Vista Libre Frontal" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "Vista Libre Posterior" +msgstr "Vista Libre Trasera" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" @@ -7507,7 +7508,7 @@ msgstr "Vista Superior" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "Vista Posterior" +msgstr "Vista Trasera" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" @@ -8125,7 +8126,7 @@ msgstr "Asignar un recurso TileSet a este TileMap para usas sus tiles." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "Dibujar tile" +msgstr "Dibujar Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8233,35 +8234,35 @@ msgstr "Índice Z" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Region Mode" -msgstr "Modo Región" +msgstr "Modo de Región" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Collision Mode" -msgstr "Modo Colisión" +msgstr "Modo de Colisión" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Occlusion Mode" -msgstr "Modo Oclusión" +msgstr "Modo de Oclusión" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation Mode" -msgstr "Modo Navegación" +msgstr "Modo de Navegación" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask Mode" -msgstr "Modo Bitmask" +msgstr "Modo de Bitmask" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Priority Mode" -msgstr "Modo Prioridad" +msgstr "Modo de Prioridad" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Icon Mode" -msgstr "Modo Icono" +msgstr "Modo de Icono" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index Mode" -msgstr "Modo Índice Z" +msgstr "Modo de Índice Z" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." @@ -9997,6 +9998,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"La casilla de búsqueda filtra los proyectos por nombre y el último " +"componente de la ruta.\n" +"Para filtrar los proyectos por nombre y ruta completa, la consulta debe " +"contener al menos un carácter `/`." #: editor/project_settings_editor.cpp msgid "Key " @@ -11115,9 +11120,8 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Exportar Perfil" +msgstr "Exportar lista a un archivo CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -11890,7 +11894,7 @@ msgstr "Crear Función" #: modules/visual_script/visual_script_editor.cpp msgid "Refresh Graph" -msgstr "Actualizar Gráfico" +msgstr "Refrescar Gráfico" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index bd6d934a59..9136ac11c3 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-23 20:21+0000\n" -"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" +"PO-Revision-Date: 2020-05-02 01:48+0000\n" +"Last-Translator: Anonymous <noreply@weblate.org>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" "Language: es_AR\n" @@ -27,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 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -2954,13 +2954,12 @@ msgid "Q&A" msgstr "Q&A" #: editor/editor_node.cpp -#, fuzzy msgid "Report a Bug" -msgstr "Reimportar" +msgstr "Reportar un Bug" #: editor/editor_node.cpp msgid "Send Docs Feedback" -msgstr "" +msgstr "Enviar comentarios sobre la documentación" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" @@ -4020,9 +4019,8 @@ msgid "Reimport" msgstr "Reimportar" #: editor/import_dock.cpp -#, fuzzy msgid "Save Scenes, Re-Import, and Restart" -msgstr "Guardar escenas, reimportar y reiniciar" +msgstr "Guardar Escenas, Reimportar y Reiniciar" #: editor/import_dock.cpp msgid "Changing the type of an imported file requires editor restart." @@ -7323,9 +7321,8 @@ msgid "This operation requires a single selected node." msgstr "Esta operación requiere un solo nodo seleccionado." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Auto Orthogonal Enabled" -msgstr "Ortogonal" +msgstr "Auto Ortogonal Activado" #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" @@ -9956,6 +9953,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"La casilla de búsqueda filtra los proyectos por nombre y el último " +"componente de la ruta.\n" +"Para filtrar los proyectos por nombre y ruta completa, la consulta debe " +"contener al menos un carácter `/`." #: editor/project_settings_editor.cpp msgid "Key " @@ -10951,6 +10952,8 @@ msgid "" "Note: Built-in scripts have some limitations and can't be edited using an " "external editor." msgstr "" +"Nota: Los scripts integrados tienen algunas limitaciones y no pueden ser " +"editados con un editor externo." #: editor/script_create_dialog.cpp msgid "Class Name:" @@ -11073,9 +11076,8 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Exportar Perfil" +msgstr "Exportar lista a un archivo CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -12759,7 +12761,7 @@ msgstr "" #: scene/main/viewport.cpp msgid "Viewport size must be greater than 0 to render anything." -msgstr "" +msgstr "El tamaño del viewport debe ser mayor a 0 para poder renderizar." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." diff --git a/editor/translations/fi.po b/editor/translations/fi.po index af9486a2ad..6695783866 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -10,11 +10,12 @@ # Sami Lehtilä <sami.lehtila@gmail.com>, 2018. # Tapani Niemi <tapani.niemi@kapsi.fi>, 2018, 2019, 2020. # Tuomas Lähteenmäki <lahtis@gmail.com>, 2019. +# Matti Niskanen <matti.t.niskanen@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-20 05:51+0000\n" +"PO-Revision-Date: 2020-05-01 11:42+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 +24,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -2757,7 +2758,7 @@ msgstr "Irrallisten resurssien hallinta..." #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "Lopeta ja palaa projektiluetteloon" +msgstr "Poistu projektiluetteloon" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/project_export.cpp @@ -5353,7 +5354,7 @@ msgstr "Palauta oletuslähennystaso" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "Valitse tila" +msgstr "Valintatila" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -5381,7 +5382,7 @@ msgstr "Siirtotila" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Mode" -msgstr "Kääntötila" +msgstr "Kiertotila" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -9898,6 +9899,9 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"Hakulaatikko suodattaa projektit nimen ja polun loppuosan mukaan.\n" +"Suodattaaksesi projektit nimen ja koko polun mukaan, haussa tulee olla " +"mukana vähintään yksi `/` merkki." #: editor/project_settings_editor.cpp msgid "Key " @@ -11017,9 +11021,8 @@ msgid "Total:" msgstr "Yhteensä:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Vie profiili" +msgstr "Vie lista CSV tiedostoon" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -11790,7 +11793,7 @@ msgstr "Tee funktio" #: modules/visual_script/visual_script_editor.cpp msgid "Refresh Graph" -msgstr "Päivitä graafi" +msgstr "Päivitä kaaviokuva" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 552da2cedf..bb371b7674 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -76,8 +76,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-23 20:21+0000\n" -"Last-Translator: LaurentOngaro <laurent@gameamea.com>\n" +"PO-Revision-Date: 2020-05-05 14:01+0000\n" +"Last-Translator: Anonymous <noreply@weblate.org>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -85,7 +85,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -5467,12 +5467,12 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Reset" -msgstr "Réinitialiser le facteur d'agrandissement" +msgstr "Réinitialiser le zoom" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Select Mode" -msgstr "Sélectionner le mode" +msgstr "Mode sélection" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Drag: Rotate" @@ -5505,7 +5505,7 @@ msgstr "Mode rotation" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode" -msgstr "Mode de mise à l'échelle" +msgstr "Mode mise à l'échelle" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5542,7 +5542,7 @@ msgstr "Activer/Désactiver l'aimantation à la grille." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Grid Snap" -msgstr "Aimanter à la grille" +msgstr "Utiliser l'aimantation à la grille" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping Options" @@ -5672,7 +5672,7 @@ msgstr "Centrer sur la sélection" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "Cadrer la sélection" +msgstr "Encadrer la sélection" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" @@ -7394,7 +7394,7 @@ msgstr "Arrière" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" -msgstr "Aligner le Transform avec la vue" +msgstr "Aligner Transform avec la vue" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Rotation with View" @@ -7480,19 +7480,19 @@ msgstr "Vue libre droite" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "Vue libre de devant" +msgstr "Vue libre avant" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "Vue libre de derrière" +msgstr "Vue libre arrière" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "Vue libre de dessus" +msgstr "Vue libre haut" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Down" -msgstr "Vue libre de dessous" +msgstr "Vue libre bas" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" @@ -7500,20 +7500,20 @@ msgstr "Modificateur de vitesse de la vue libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Slow Modifier" -msgstr "Modificateur de vitesse de la vue libre" +msgstr "Ralentissement de la vue libre" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" -msgstr "Verrouiller la rotation de la vue" +msgstr "Rotation de la vue verrouillée" #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." msgstr "" -"Note : La valeur FPS affichée est la fréquence d'images de l'éditeur.\n" -"Il ne doit pas être utilisé comme un indicateur fiable de la performance en " -"jeu." +"Note : Les FPS (images par secondes) affichées sont celles de éditeur.\n" +"Elles ne doivent pas être utilisées comme un indicateur fiable de la " +"performance en jeu." #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" @@ -7521,11 +7521,11 @@ msgstr "Dialogue XForm" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Nodes To Floor" -msgstr "Aligner les nœuds au sol" +msgstr "Aligner les nœuds avec le sol" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "N'a pas pu trouvé de sol solide pour y attacher la sélection." +msgstr "Pas de sol solide trouvé pour y attacher la sélection." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7539,11 +7539,11 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Local Space" -msgstr "Utiliser l'espace local" +msgstr "Utiliser les coordonées locales" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Snap" -msgstr "Aligner sur la grille" +msgstr "Aligner avec la grille" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7555,11 +7555,11 @@ msgstr "Vue de dessus" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rear View" -msgstr "Vue arrière" +msgstr "Vue de derrière" #: editor/plugins/spatial_editor_plugin.cpp msgid "Front View" -msgstr "Vue avant" +msgstr "Vue de devant" #: editor/plugins/spatial_editor_plugin.cpp msgid "Left View" @@ -7579,7 +7579,7 @@ msgstr "Insérer une clef d'animation" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" -msgstr "Focaliser l'origine" +msgstr "Focaliser sur l'origine" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" @@ -8174,7 +8174,7 @@ msgstr "Donnez une ressource TileSet à cette TileMap pour utiliser ses tuiles." #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "Peindre la case" +msgstr "Peindre la tuile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" @@ -8186,7 +8186,7 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "Sélectionner une case" +msgstr "Sélectionner une tuile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Left" diff --git a/editor/translations/he.po b/editor/translations/he.po index 35421252b2..69d8bcc3b5 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -5,18 +5,19 @@ # Daniel <lorddaniel09@gmail.com>, 2018. # Ben Golan <golanben4@gmail.com>, 2017. # Luc Stepniewski <lior@gradstein.info>, 2017. -# Yaron Shahrabani <sh.yaron@gmail.com>, 2018, 2019. +# Yaron Shahrabani <sh.yaron@gmail.com>, 2018, 2019, 2020. # RaikaRakka <shaiyatta@gmail.com>, 2018. # Ido Dana <idodana01@gmail.com>, 2019. # Daniel Dovgun <daniel.dovgun@gmail.com>, 2019. # MordechaiHadad <Mordechai.hadad01@gmail.com>, 2019. # Daniel <danielharush5252@gmail.com>, 2020. +# test test <ugbdvwpeikvyzwaadt@awdrt.org>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-02-25 09:41+0000\n" -"Last-Translator: Daniel <danielharush5252@gmail.com>\n" +"PO-Revision-Date: 2020-05-05 14:01+0000\n" +"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" "Language-Team: Hebrew <https://hosted.weblate.org/projects/godot-engine/" "godot/he/>\n" "Language: he\n" @@ -25,7 +26,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 4.0-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -34,7 +35,7 @@ msgstr "משתנה סוג לא חוקי לפונקציית convert(), יש ל #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." -msgstr "צופה מחרוזת באורך 1 (תו)" +msgstr "צפויה מחרוזת באורך 1 (תו)." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -722,13 +723,12 @@ msgid "Line Number:" msgstr "מספר השורה:" #: editor/code_editor.cpp -#, fuzzy msgid "%d replaced." -msgstr "החלפה…" +msgstr "%d הוחלף." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." -msgstr "" +msgstr "d% התאמות." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy @@ -4044,9 +4044,8 @@ msgid "Saving..." msgstr "שמירה…" #: editor/import_dock.cpp -#, fuzzy msgid "%d Files" -msgstr " קבצים" +msgstr "%d קבצים" #: editor/import_dock.cpp msgid "Set as Default for '%s'" @@ -6788,66 +6787,58 @@ msgid "Error writing TextFile:" msgstr "שגיאה בייבוא ערכת הנושא" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "לא ניתן ליצור תיקייה." +msgstr "לא ניתן לטעון קובץ מהמיקום:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving file!" -msgstr "שגיאה בשמירה" +msgstr "שגיאה בשמירת קובץ!" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error while saving theme." -msgstr "שגיאה בשמירת ערכת העיצוב" +msgstr "שגיאה בשמירת ערכת העיצוב." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error Saving" msgstr "שגיאה בשמירה" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error importing theme." -msgstr "שגיאה בייבוא ערכת הנושא" +msgstr "שגיאה בייבוא ערכת העיצוב." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error Importing" msgstr "שגיאה בייבוא" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." -msgstr "תיקייה חדשה…" +msgstr "קובץ טקסט חדש…" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open File" msgstr "פתיחת קובץ" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save File As..." -msgstr "שמירה בשם…" +msgstr "שמירת קובץ בשם…" #: editor/plugins/script_editor_plugin.cpp msgid "Can't obtain the script for running." -msgstr "" +msgstr "לא ניתן לקבל את הסקריפט להרצה." #: editor/plugins/script_editor_plugin.cpp msgid "Script failed reloading, check console for errors." -msgstr "" +msgstr "רענון הסקריפט נכשל, נא לחפש את השגיאות במסוף." #: editor/plugins/script_editor_plugin.cpp msgid "Script is not in tool mode, will not be able to run." -msgstr "" +msgstr "הסקריפט אינו במצב כלים, לא תהיה לו אפשרות לרוץ." #: editor/plugins/script_editor_plugin.cpp msgid "" "To run this script, it must inherit EditorScript and be set to tool mode." msgstr "" +"כדי להריץ את הסקריפט הזה, עליו לרשת EditorScript ולהגדיר אותו למצב כלים." #: editor/plugins/script_editor_plugin.cpp msgid "Import Theme" @@ -6880,9 +6871,8 @@ msgid "Find Previous" msgstr "איתור הקודם" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Filter scripts" -msgstr "מאפייני פריט." +msgstr "סינון סקריפטים" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." diff --git a/editor/translations/hu.po b/editor/translations/hu.po index d066d5e317..620a2d4d5b 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -10,7 +10,6 @@ # Tusa Gamer <tusagamer@mailinator.com>, 2018. # Máté Lugosi <mate.lugosi@gmail.com>, 2019. # sztrovacsek <magadeve@gmail.com>, 2019. -# Deleted User <noreply+18797@weblate.org>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" diff --git a/editor/translations/it.po b/editor/translations/it.po index 1c7c72ce12..8e9432baac 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -46,12 +46,14 @@ # Douglas Fiedler <dognew@gmail.com>, 2020. # E440QF <ettore.beltra@gmail.com>, 2020. # Giuseppe Lucido <giuseppe.lucido@gmail.com>, 2020. +# Mirko Proto <mirko7@protonmail.com>, 2020. +# J. Lavoie <j.lavoie@net-c.ca>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-27 08:25+0000\n" -"Last-Translator: Micila Micillotto <micillotto@gmail.com>\n" +"PO-Revision-Date: 2020-05-04 15:12+0000\n" +"Last-Translator: J. Lavoie <j.lavoie@net-c.ca>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -59,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 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -3026,7 +3028,7 @@ msgstr "Esegui la scena in modifica." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "Esegui scena" +msgstr "Avvia Scena" #: editor/editor_node.cpp msgid "Play custom scene" @@ -3034,7 +3036,7 @@ msgstr "Esegui scena personalizzata" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "Esegui scena personalizzata" +msgstr "Avvia Scena Personalizzata" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." @@ -3071,7 +3073,7 @@ msgstr "Ispettore" #: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "Espandi pannello inferiore" +msgstr "Espandi Pannello Inferiore" #: editor/editor_node.cpp msgid "Output" @@ -11111,9 +11113,8 @@ msgid "Total:" msgstr "Totale:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Esporta profilo" +msgstr "Esporta l'elenco in un file CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index aac20e9666..8aef04db94 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-04-27 08:25+0000\n" -"Last-Translator: Anonymous <noreply@weblate.org>\n" +"PO-Revision-Date: 2020-05-04 15:12+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 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -592,7 +592,7 @@ msgstr "選択範囲を複製" #: editor/animation_track_editor.cpp msgid "Duplicate Transposed" -msgstr "複製を転置" +msgstr "転置して複製" #: editor/animation_track_editor.cpp msgid "Delete Selection" @@ -1862,7 +1862,7 @@ msgstr "隠しファイルをオン / オフ" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "お気に入りのオン / オフ" +msgstr "お気に入りにする / しない" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" @@ -1870,7 +1870,7 @@ msgstr "モード切替え" #: editor/editor_file_dialog.cpp msgid "Focus Path" -msgstr "フォーカスパス" +msgstr "パスにフォーカス" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" @@ -1898,7 +1898,7 @@ msgstr "ファイル更新。" #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." -msgstr "現在のフォルダをお気に入りにする/お気に入りから外す。" +msgstr "現在のフォルダをお気に入りにする / しない。" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Toggle the visibility of hidden files." @@ -1989,7 +1989,7 @@ msgstr "メソッド" #: editor/editor_help.cpp msgid "Theme Properties" -msgstr "テーマプロパティ" +msgstr "テーマ プロパティ" #: editor/editor_help.cpp msgid "Enumerations" @@ -4051,6 +4051,7 @@ msgid "Copy Resource" msgstr "リソースをコピー" #: editor/inspector_dock.cpp +#, fuzzy msgid "Make Built-In" msgstr "ビルトインを作成" @@ -5316,22 +5317,22 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock Selected" -msgstr "選択をロック" +msgstr "選択対象をロック" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock Selected" -msgstr "選択を解除" +msgstr "選択対象をロック解除" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Group Selected" -msgstr "選択したグループ" +msgstr "選択対象をグループ化" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Ungroup Selected" -msgstr "グループ解除" +msgstr "選択対象をグループ解除" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" @@ -5390,7 +5391,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "Alt+右クリック: 奥行き(被写界深度)リストの選択" +msgstr "Alt+右クリック: 奥行き選択リスト" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5500,12 +5501,12 @@ msgstr "ガイドにスナップ" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "選択したオブジェクトをその場でロック (移動不可能にする)。" +msgstr "選択したオブジェクトを現在位置でロック (移動不可能にする)。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "選択したオブジェクトをアンロック (移動可能にする)。" +msgstr "選択したオブジェクトをロック解除 (移動可能にする)。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5568,11 +5569,11 @@ msgstr "グループアイコンとロックアイコンを表示" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "センター選択" +msgstr "選択対象を中央に" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "フレーム選択" +msgstr "選択対象を全面に" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" @@ -6842,7 +6843,7 @@ msgstr "ブレーク" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp msgid "Continue" -msgstr "実行を継続" +msgstr "続行" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" @@ -7034,7 +7035,7 @@ msgstr "シンボルを補完" #: editor/plugins/script_text_editor.cpp msgid "Evaluate Selection" -msgstr "選択したものを評価する" +msgstr "選択範囲を評価する" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -7058,7 +7059,7 @@ msgstr "複数ファイル内を検索..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "コンテキストヘルプ" +msgstr "コンテキスト ヘルプ" #: editor/plugins/script_text_editor.cpp msgid "Toggle Bookmark" @@ -7363,11 +7364,11 @@ msgstr "フリールック右" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "前方をフリールックで見る" +msgstr "フリールック前進" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "フリールック後方" +msgstr "フリールック後進" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" @@ -7379,11 +7380,11 @@ msgstr "フリールック下" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "フリールックの速度を調整" +msgstr "フリールックの速度調整" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Slow Modifier" -msgstr "フリールックの減速を調整" +msgstr "フリールックの減速調整" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -7399,7 +7400,7 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp msgid "XForm Dialog" -msgstr "Xformダイアログ" +msgstr "XFormダイアログ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Nodes To Floor" @@ -7407,7 +7408,7 @@ msgstr "ノードをフロアにスナップ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "選択をスナップする剛体の床を見つけれません。" +msgstr "選択対象をスナップさせる剛体の床を見つけられませんでした。" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7415,9 +7416,9 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" -"ドラッグ:回転\n" -"Alt+ドラッグ:移動\n" -"Alt+右クリック: 奥行きリストの選択" +"ドラッグ: 回転\n" +"Alt+ドラッグ: 移動\n" +"Alt+右クリック: 奥行き選択リスト" #: editor/plugins/spatial_editor_plugin.cpp msgid "Use Local Space" @@ -7453,7 +7454,7 @@ msgstr "右側面図" #: editor/plugins/spatial_editor_plugin.cpp msgid "Switch Perspective/Orthogonal View" -msgstr "透視図/正投影図の切り替え" +msgstr "透視投影 / 平行投影の切り替え" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" @@ -7465,7 +7466,7 @@ msgstr "原点にフォーカス" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "選択にフォーカス" +msgstr "選択対象にフォーカス" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" @@ -7494,7 +7495,7 @@ msgstr "2 ビューポート" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "2 ビューポート(Alt)" +msgstr "2 ビューポート (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" @@ -7502,7 +7503,7 @@ msgstr "3 ビューポート" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "3 ビューポート(Alt)" +msgstr "3 ビューポート (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" @@ -7799,7 +7800,7 @@ msgstr "スプライトフレーム" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" -msgstr "矩形の領域を設定" +msgstr "領域 Rect を設定" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Margin" @@ -7989,7 +7990,7 @@ msgstr "フォント" #: editor/plugins/theme_editor_plugin.cpp msgid "Color" -msgstr "\\ Color" +msgstr "Color" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme File" @@ -7997,7 +7998,7 @@ msgstr "テーマ ファイル" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Erase Selection" -msgstr "選択対象を消去" +msgstr "選択範囲を消去" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Fix Invalid Tiles" @@ -8006,7 +8007,7 @@ msgstr "無効なタイルを修正" #: editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cut Selection" -msgstr "選択対象を切り取り" +msgstr "選択範囲を切り取り" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -8018,7 +8019,7 @@ msgstr "直線を描画" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "矩形ペイント" +msgstr "長方形ペイント" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" @@ -8030,7 +8031,7 @@ msgstr "タイルマップを消去" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Find Tile" -msgstr "タイルを検索する" +msgstr "タイルを検索" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Transpose" @@ -8056,19 +8057,19 @@ msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" -msgstr "タイルを塗る" +msgstr "タイルをペイント" #: editor/plugins/tile_map_editor_plugin.cpp msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+左マウスボタン:線の描画\n" -"Shift+Ctrl+左マウスボタン:矩形ペイント" +"Shift+左マウスボタン: 直線に描く\n" +"Shift+Ctrl+左マウスボタン: 長方形ペイント" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "タイルを選択" +msgstr "タイルをピック" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Left" @@ -8208,7 +8209,7 @@ msgstr "ビットマスクを消去。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new rectangle." -msgstr "新規矩形を作成。" +msgstr "新しく長方形を作成。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." @@ -8265,12 +8266,12 @@ msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" -"ハンドルをドラッグして矩形を編集します。\n" -"別のタイルをクリックしてそれを編集します。" +"ハンドルをドラッグして長方形を編集します。\n" +"別のタイルをクリックするとそれを編集します。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete selected Rect." -msgstr "選択した矩形を削除する。" +msgstr "選択した長方形を削除する。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -8476,7 +8477,7 @@ msgstr "タイプの変更" #: editor/plugins/version_control_editor_plugin.cpp msgid "Stage Selected" -msgstr "選択物をステージする" +msgstr "選択対象をステージする" #: editor/plugins/version_control_editor_plugin.cpp msgid "Stage All" @@ -9285,6 +9286,7 @@ msgstr "" "ためにそれを使用しないでください。" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." @@ -9911,6 +9913,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"検索ボックスでは、プロジェクトは名前およびパスの最後の部分でフィルターされま" +"す。\n" +"プロジェクト名および完全パスでフィルターするには、クエリには `/` 文字が少なく" +"とも1つ必要です。" #: editor/project_settings_editor.cpp msgid "Key " @@ -11026,9 +11032,8 @@ msgid "Total:" msgstr "合計:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "プロファイルのエクスポート" +msgstr "CSVファイルにリストをエクスポート" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -11779,7 +11784,7 @@ msgstr "グラフを編集する関数を選択または作成します。" #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" -msgstr "選択済みを削除" +msgstr "選択対象を削除" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" @@ -11795,11 +11800,11 @@ msgstr "ノードを切り取る" #: modules/visual_script/visual_script_editor.cpp msgid "Make Function" -msgstr "関数の作成" +msgstr "関数を作成" #: modules/visual_script/visual_script_editor.cpp msgid "Refresh Graph" -msgstr "グラフの更新" +msgstr "グラフを更新" #: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index b2dbd4e353..f25550709a 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-20 05:51+0000\n" -"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n" +"PO-Revision-Date: 2020-05-01 11:42+0000\n" +"Last-Translator: Ch. <ccwpc@hanmail.net>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" "Language: ko\n" @@ -30,7 +30,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -5929,7 +5929,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Collision Sibling" -msgstr "개별 Convex 충돌 형제 만들기" +msgstr "단일 Convex 충돌 형제 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -9838,6 +9838,9 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"이 검색창은 프로젝트를 이름과 경로의 마지막 부분으로 거릅니다.\n" +"프로젝트를 전체 경로를 기준으로 걸러내려면 검색어에 `/` 가 한 글자 이상 포함" +"시키세요." #: editor/project_settings_editor.cpp msgid "Key " @@ -10949,9 +10952,8 @@ msgid "Total:" msgstr "전체:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "프로필 내보내기" +msgstr "목록을 CSV 파일로 내보내기" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -12584,7 +12586,7 @@ msgstr "" #: scene/main/viewport.cpp msgid "Viewport size must be greater than 0 to render anything." -msgstr "뷰포트 크기는 무엇이든 렌더링하기 위해 0보다 커야 합니다." +msgstr "무엇이든 렌더링하려면 뷰포트 크기가 0보다 커야 합니다." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." diff --git a/editor/translations/mr.po b/editor/translations/mr.po index 5b2a55ffbe..902c243d16 100644 --- a/editor/translations/mr.po +++ b/editor/translations/mr.po @@ -3,41 +3,42 @@ # Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. # Prachi Joshi <josprachi@yahoo.com>, 2019, 2020. +# Shirious <sad3119823@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2020-01-30 03:56+0000\n" -"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n" +"PO-Revision-Date: 2020-05-05 14:01+0000\n" +"Last-Translator: Shirious <sad3119823@gmail.com>\n" "Language-Team: Marathi <https://hosted.weblate.org/projects/godot-engine/" "godot/mr/>\n" "Language: mr\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 3.11-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "" +msgstr "convert() साठी अवैध आरग्युमेन्ट, TYPE_* कोन्सटन्ट वापरा." #: 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 #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "डिकोड करण्यासाठी पुरसे बाईटस् नाहित, किंवा अवैध फ़ोरमैट." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "एक्सप्रेशन मधे अवैध इनपुट %i (पास नाही झाले)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self वापरले जाऊ शकत नाही कारण इन्सटन्स null आहे (पास नाही झाले)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -1928,9 +1929,8 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -#, fuzzy msgid "(value)" -msgstr "मूल्य:" +msgstr "(किंमत)" #: editor/editor_help.cpp msgid "" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index ba11dc0dad..93219f8bfc 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -44,7 +44,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-23 20:21+0000\n" +"PO-Revision-Date: 2020-05-04 15:12+0000\n" "Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" @@ -53,7 +53,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -2023,8 +2023,8 @@ msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"Er is momenteel geen beschrijving voor deze eigenschap. Help ons alsjeblieft " -"door [color=$color][url=$url]een toe te voegen[/url][/color]!" +"Er is momenteel geen beschrijving voor deze eigenschap. Help ons alstublieft " +"door [color=$color][url=$url]een bijdrage te leveren[/url][/color]!" #: editor/editor_help.cpp msgid "Method Descriptions" @@ -2035,8 +2035,8 @@ msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"Er is momenteel geen beschrijving voor deze methode. Help ons alsjeblieft " -"door [color=$color][url=$url]een toe te voegen[/url][/color]!" +"Er is momenteel geen beschrijving voor deze methode. Help ons alstublieft " +"door [color=$color][url=$url]een bijdrage te leveren[/url][/color]!" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2500,8 +2500,8 @@ msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" -"Deze optie is verouderd. Situaties waar een hernieuwing geforceerd moet " -"worden zijn softwarefouten. Rapporteer dit alsjeblieft." +"Deze optie is verouderd. Situaties waarbij gedwongen herladen moet worden, " +"worden gezien als softwarefouten. Rapporteer dit alstublieft." #: editor/editor_node.cpp msgid "Pick a Main Scene" @@ -2730,7 +2730,7 @@ msgstr "Alle scènes opslaan" #: editor/editor_node.cpp msgid "Convert To..." -msgstr "Converteer Naar..." +msgstr "Omzetten naar..." #: editor/editor_node.cpp msgid "MeshLibrary..." @@ -5898,7 +5898,7 @@ msgstr "Creëer een statisch tri-mesh lichaam" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "Dit werkt niet op scènewortel!" +msgstr "Dit werkt niet op de scènewortel!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Shape" @@ -6986,7 +6986,7 @@ msgstr "Kies Kleur" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Convert Case" -msgstr "Converteer Hoofdlettergebruik" +msgstr "Letters omzetten" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Uppercase" @@ -6998,7 +6998,7 @@ msgstr "Kleine letters" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" -msgstr "Maak Hoofdletters" +msgstr "Elk Woord Met Hoofdletter" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" @@ -7074,15 +7074,15 @@ msgstr "Trim Navolgende Spaties" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Spaces" -msgstr "Converteer Indentatie Naar Spaties" +msgstr "Insprong in spaties omzetten" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Tabs" -msgstr "Converteer Indentatie Naar Tabs" +msgstr "Insprong in Tabs omzetten" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" -msgstr "Auto Indentatie" +msgstr "Automatisch inspringen" #: editor/plugins/script_text_editor.cpp msgid "Find in Files..." @@ -7678,7 +7678,7 @@ msgstr "Ongeldige geometrie, kan geen polygon creëren." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Polygon2D" -msgstr "Converteer naar Polygon2D" +msgstr "Naar Polygon2D omzetten" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." @@ -9816,8 +9816,8 @@ msgstr "" "\n" "%s\n" "\n" -"Als je doorgaat met het openen van dit bestand, zal het worden geconverteerd " -"naar Godot's huidige format voor project-configuratiebestanden.\n" +"Als je doorgaat met het openen van dit bestand, zal het worden omgezet naar " +"Godot's huidige formaat voor project-configuratiebestanden.\n" "Waarschuwing: Hierna kan het project niet meer worden geopend door oudere " "versies van Godot Engine." @@ -9966,6 +9966,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"De zoekbalk filtert projecten op naam en naam van de map waarin het project " +"staat.\n" +"Om ook op het volledige pad te filteren, moet de zoekopdracht tenminste één " +"`/` karakter bevatten." #: editor/project_settings_editor.cpp msgid "Key " @@ -10706,7 +10710,7 @@ msgstr "Knoop hieronder toevoegen" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" -msgstr "Alles uit-/inklappen" +msgstr "Alles in-/uitklappen" #: editor/scene_tree_dock.cpp msgid "Change Type" @@ -10718,7 +10722,7 @@ msgstr "Onder nieuwe knoop hangen" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" -msgstr "Scènewortel instellen" +msgstr "Als scènewortel instellen" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" @@ -11085,9 +11089,8 @@ msgid "Total:" msgstr "Totaal:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Profiel exporteren" +msgstr "Exporteer lijst naar een csv-bestand" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -12208,9 +12211,7 @@ msgstr "" msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" -msgstr "" -"Een vorm moet voorzien worden om CollisionShape2D te laten functioneren. " -"Creëer hiervoor alsjeblieft een vorm resource!" +msgstr "Een CollisionShape2D heeft een vorm nodig in de Shape-eigenschap!" #: scene/2d/cpu_particles_2d.cpp msgid "" @@ -12238,7 +12239,7 @@ msgstr "" #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon." msgstr "" -"De occluder polygoon van deze occluder is leeg. Teken alsjeblieft een " +"De occluder-polygoon van deze occluder is leeg. Teken alstublieft een " "polygoon." #: scene/2d/navigation_polygon.cpp @@ -12703,7 +12704,7 @@ msgstr "Alarm!" #: scene/gui/dialogs.cpp msgid "Please Confirm..." -msgstr "Bevestig alsjeblieft..." +msgstr "Bevestig alstublieft..." #: scene/gui/popup.cpp msgid "" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index eb84ea26ca..a7b57f31ba 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-04-27 08:25+0000\n" +"PO-Revision-Date: 2020-05-01 11:42+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 4.0.2-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -9933,6 +9933,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"Pasek wyszukiwania filtruje projekty po nazwie i ostatnim komponencie " +"ścieżki.\n" +"By filtrować po nazwie i pełnej ścieżce, zapytanie musi zawierać " +"przynajmniej jeden znak \"/\"." #: editor/project_settings_editor.cpp msgid "Key " @@ -11049,9 +11053,8 @@ msgid "Total:" msgstr "Całkowity:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Eksportuj profil" +msgstr "Eksportuj listę do pliku CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index b7102a7cdf..d38c4186c7 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -86,12 +86,14 @@ # Richard Urban <redasuio1@gmail.com>, 2020. # Wellyngton R Weller <well.weller@hotmail.com>, 2020. # Lucas Araujo <lucassants2808@gmail.com>, 2020. +# Sr Half <flavio05@outlook.com>, 2020. +# Matheus Pesegoginski <pese.ek.tk@outlook.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2020-04-27 08:25+0000\n" -"Last-Translator: johnnybigoode <jamarson@gmail.com>\n" +"PO-Revision-Date: 2020-05-04 15:12+0000\n" +"Last-Translator: Anonymous <noreply@weblate.org>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -99,7 +101,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -736,7 +738,7 @@ msgstr "Selecionar Todos/Nenhum" #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" -msgstr "Adicionar Trilha de Clipes de Áudio" +msgstr "Adicionar Clipe de Trilha de Áudio" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip Start Offset" @@ -3128,7 +3130,7 @@ msgstr "" "Você pode então aplicar modificações e construir seu próprio APK na guia " "Exportação (Adicionando módulos, trocando o AndroidManifest.xml, etc.).\n" "Note que para fazer uma construção customizada, em vez de usar APKs pre-" -"construídos, a opção \"Usar construção customizada\" deve estar ativa nas " +"construídos, a opção \"Usar Construção Customizada\" deve estar ativa nas " "predefinições de exportação Android." #: editor/editor_node.cpp @@ -5655,7 +5657,7 @@ msgstr "Visualizar Canvas Scale" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Translation mask for inserting keys." -msgstr "Mascara de tradução para inserção de chaves" +msgstr "Máscara de tradução para inserção de chaves" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation mask for inserting keys." @@ -6044,7 +6046,7 @@ msgstr "" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Single Convex Collision Sibling" -msgstr "Criar Simples Colisão Convexa Irmã(s)" +msgstr "Criar um irmão de Colisão Convexa" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "" @@ -7369,7 +7371,7 @@ msgstr "Essa operação requer um único nó selecionado." #: editor/plugins/spatial_editor_plugin.cpp msgid "Auto Orthogonal Enabled" -msgstr "Ortogonal automático habilitado" +msgstr "Auto-Ortogonal Habilitado" #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" @@ -7689,7 +7691,7 @@ msgstr "Visualizar Polígono De Colisão 2D" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D" -msgstr "Criar LightOccluder2D" +msgstr "Criar Polígono de Oclusão (LightOccluder2D)" #: editor/plugins/sprite_editor_plugin.cpp msgid "LightOccluder2D Preview" @@ -7730,7 +7732,7 @@ msgstr "Criar PolígonoDeColisão2D Irmão" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." -msgstr "Geometria inválida, não é possível criar oclusor de luz." +msgstr "Geometria inválida, não é possível criar o oclusor de luz." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D Sibling" @@ -8145,11 +8147,11 @@ msgstr "Pegar Tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Left" -msgstr "Girar à esquerda" +msgstr "Girar à Esquerda" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Right" -msgstr "Girar à direita" +msgstr "Girar à Direita" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Flip Horizontally" @@ -9991,6 +9993,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"A caixa de busca filtra projetos por nome e pelo último componente do " +"caminho.\n" +"Para filtrar projetos por nome e pelo caminho completo, a consulta deve " +"conter pelo menos um caractere `/`." #: editor/project_settings_editor.cpp msgid "Key " @@ -11107,9 +11113,8 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Exportar Perfil" +msgstr "Exportar lista para arquivo CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index f7c6f042d2..6314d31908 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-20 05:51+0000\n" +"PO-Revision-Date: 2020-05-01 11:42+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" @@ -29,7 +29,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -1473,7 +1473,7 @@ msgstr "O Ficheiro não existe." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "Não está no Caminho do recurso." +msgstr "Não está no caminho do recurso." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" @@ -2498,27 +2498,27 @@ msgstr "Incapaz de localizar campo Script para plugin em: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "Incapaz de carregar Script addon do Caminho: '%s'." +msgstr "Incapaz de carregar script addon do caminho: '%s'." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"Incapaz de carregar Script addon do caminho: '%s' Parece haver um erro no " +"Incapaz de carregar script addon do caminho: '%s' Parece haver um erro no " "código, reveja a sintaxe." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" -"Incapaz de carregar Script addon do Caminho: '%s' Tipo base não é " +"Incapaz de carregar script addon do Caminho: '%s' Tipo base não é " "EditorPlugin." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" -"Incapaz de carregar Script addon do Caminho: '%s' Script não está no modo " +"Incapaz de carregar script addon do Caminho: '%s' Script não está no modo " "ferramenta." #: editor/editor_node.cpp @@ -3443,7 +3443,7 @@ msgstr "Não foi encontrado version.txt dentro dos Modelos." #: editor/export_template_manager.cpp msgid "Error creating path for templates:" -msgstr "Erro ao criar o Caminho para os Modelos:" +msgstr "Erro ao criar o caminho para os modelos:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" @@ -6069,7 +6069,7 @@ msgstr "Fonte da Malha não especificada (e MultiMesh não contêm Malha)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "A fonte da Malha é inválida (Caminho inválido)." +msgstr "A fonte da malha é inválida (caminho inválido)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." @@ -6085,7 +6085,7 @@ msgstr "Fonte de superfície não especificada." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "A fonte de superfície é inválida (Caminho inválido)." +msgstr "A fonte de superfície é inválida (caminho inválido)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." @@ -9615,7 +9615,7 @@ msgstr "Seria uma boa ideia dar um nome ao Projeto." #: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "Caminho de Projeto inválido (alguma alteração?)." +msgstr "Caminho de projeto inválido (alguma alteração?)." #: editor/project_manager.cpp msgid "" @@ -9902,6 +9902,10 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"A caixa de pesquisa filtra projetos por nome e último componente do " +"caminho.\n" +"Para filtrar projetos por nome e caminho completo, a pesquisa tem de conter " +"pelo menos um caráter `/`." #: editor/project_settings_editor.cpp msgid "Key " @@ -10101,7 +10105,7 @@ msgstr "Remover tradução" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "Adicionar correção remapeada" +msgstr "Adicionar Caminho Remapeado" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" @@ -10862,11 +10866,11 @@ msgstr "Nome de classe inválido." #: editor/script_create_dialog.cpp msgid "Invalid inherited parent name or path." -msgstr "Nome ou Caminho de parente herdado inválido." +msgstr "Nome ou caminho de parente herdado inválido." #: editor/script_create_dialog.cpp msgid "Script path/name is valid." -msgstr "Caminho/nome de Script é válido." +msgstr "Caminho/nome de script é válido." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -11017,13 +11021,12 @@ msgid "Total:" msgstr "Total:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Exportar Perfil" +msgstr "Exportar lista para ficheiro CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" -msgstr "Caminho do recurso" +msgstr "Caminho do Recurso" #: editor/script_editor_debugger.cpp msgid "Type" @@ -11241,7 +11244,7 @@ msgstr "" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "Formato de dicionário de instância inválido (Script inválido em @path)" +msgstr "Formato de dicionário de instância inválido (script inválido em @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" @@ -12240,7 +12243,7 @@ msgstr "" #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." msgstr "" -"Para funcionar, a Propriedade Caminho tem de apontar para um nó Node2D " +"Para funcionar, a propriedade caminho tem de apontar para um nó Node2D " "válido." #: scene/2d/skeleton_2d.cpp diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 2344b31e59..d8c55d825e 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -70,12 +70,13 @@ # Ivan Kuzmenko <kuzmenko.ivan2002@yandex.com>, 2020. # Super Pracion <superpracion2@gmail.com>, 2020. # PizzArt <7o7goo7o7@gmail.com>, 2020. +# TheGracekale <mrsmailbot.lg@gmail.com>, 2020. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-23 20:21+0000\n" -"Last-Translator: PizzArt <7o7goo7o7@gmail.com>\n" +"PO-Revision-Date: 2020-05-05 14:01+0000\n" +"Last-Translator: Super Pracion <superpracion2@gmail.com>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -84,7 +85,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -9966,6 +9967,9 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"Поле поиска фильтрует проекты по имени и последнему компоненту пути\n" +"Чтобы отфильтровать проекты по имени и полному пути, запрос должен содержать " +"хотя бы один символ `/`." #: editor/project_settings_editor.cpp msgid "Key " @@ -10935,9 +10939,8 @@ msgid "Invalid inherited parent name or path." msgstr "Неверное имя или путь наследуемого предка." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script path/name is valid." -msgstr "Путь/имя скрипта действителен." +msgstr "Путь/имя скрипта допустимы." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -11089,9 +11092,8 @@ msgid "Total:" msgstr "Всего:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Экспортировать профиль" +msgstr "Экспортировать профиль в CSV файл" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -12524,7 +12526,6 @@ msgid "PathFollow only works when set as a child of a Path node." msgstr "PathFollow работает только при если она дочь узла Path." #: scene/3d/path.cpp -#, fuzzy msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." diff --git a/editor/translations/sk.po b/editor/translations/sk.po index d5730a7db9..295b7ac429 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-23 20:21+0000\n" +"PO-Revision-Date: 2020-05-01 11:42+0000\n" "Last-Translator: Richard Urban <redasuio1@gmail.com>\n" "Language-Team: Slovak <https://hosted.weblate.org/projects/godot-engine/" "godot/sk/>\n" @@ -22,7 +22,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -3034,6 +3034,13 @@ msgid "" "the \"Use Custom Build\" option should be enabled in the Android export " "preset." msgstr "" +"Toto pripraví vás projekt pre vlastný Android builds keď inštalujete source " +"template do \"res://android/build\".\n" +"Teraz môžete pridať modifikácie a tak vytvoriť vlastné APK na export " +"(pridávanie modulov, zmeniť AndroidManifest.xml, atď.).\n" +"Poznámka že v záujme vytvorenia vlastných zostavení namiesto použitia vopred " +"vytvorených súborov APK by mala byť v predvoľbe exportu systému Android " +"povolená možnosť \"Use Costom Build\"." #: editor/editor_node.cpp msgid "" @@ -3042,27 +3049,30 @@ msgid "" "Remove the \"res://android/build\" directory manually before attempting this " "operation again." msgstr "" +"V tomto projekte už je nainštalovaný Android build template a nemôže byť " +"prepísaný.\n" +"Manuálne odstránte \"res://android/build\" predtým ako sa znova pokúsite o " +"túto operáciu." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "" +msgstr "Importovať Šablóny Zo ZIP File-u" #: editor/editor_node.cpp -#, fuzzy msgid "Template Package" -msgstr "Všetky vybrané" +msgstr "Balíček Šablón" #: editor/editor_node.cpp msgid "Export Library" -msgstr "" +msgstr "Exportovať Library" #: editor/editor_node.cpp msgid "Merge With Existing" -msgstr "" +msgstr "Spojiť Z Existujúcim" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "" +msgstr "Otvoriť & Spustiť Script" #: editor/editor_node.cpp #, fuzzy diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 46e671a8a8..e713e79a4c 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-04-20 05:51+0000\n" +"PO-Revision-Date: 2020-05-01 11:43+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/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 4.0.2-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -9937,6 +9937,9 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"Поле пошуку фільтрує проєкти за назвою і останнім компонентом шляху.\n" +"Щоб виконати фільтрування проєктів за назвою і повним шляхом, у запиті має " +"бути принаймні один символ `/`." #: editor/project_settings_editor.cpp msgid "Key " @@ -11055,9 +11058,8 @@ msgid "Total:" msgstr "Загалом:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "Експорт профілю" +msgstr "Експортувати список до файла CSV" #: editor/script_editor_debugger.cpp msgid "Resource Path" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 953ec63714..538e017a5d 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -64,8 +64,8 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2020-04-24 15:30+0000\n" -"Last-Translator: Revan Ji <jiruifancr@gmail.com>\n" +"PO-Revision-Date: 2020-05-01 11:42+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" "Language: zh_CN\n" @@ -73,7 +73,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.0.2-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -5901,7 +5901,6 @@ msgstr "" "这是最准确(但是最慢)的碰撞检测手段。" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Single Convex Collision Sibling" msgstr "创建单一凸碰撞同级" @@ -7211,9 +7210,8 @@ msgid "This operation requires a single selected node." msgstr "此操作只能应用于单个选中节点。" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Auto Orthogonal Enabled" -msgstr "正交" +msgstr "启用自动正交" #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" @@ -9774,6 +9772,8 @@ msgid "" "To filter projects by name and full path, the query must contain at least " "one `/` character." msgstr "" +"搜索框根据名称和路径的末尾部分来过滤项目。\n" +"如果要根据名称和完整路径过滤,搜索内容应至少包含一个“/”字符。" #: editor/project_settings_editor.cpp msgid "Key " @@ -10874,9 +10874,8 @@ msgid "Total:" msgstr "合计:" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Export list to a CSV file" -msgstr "导出配置文件" +msgstr "将列表导出为CSV文件" #: editor/script_editor_debugger.cpp msgid "Resource Path" @@ -12171,7 +12170,7 @@ msgstr "平面形状无法正常工作,未来版本将被删除。请勿使用 #: scene/3d/collision_shape.cpp msgid "" "ConcavePolygonShape doesn't support RigidBody in another mode than static." -msgstr "" +msgstr "ConcavePolygonShape仅支持静态RigidBody。" #: scene/3d/cpu_particles.cpp msgid "Nothing is visible because no mesh has been assigned." diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index e3d9a84cfb..770b4d38f2 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -2,27 +2,28 @@ # Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). # This file is distributed under the same license as the Godot source code. -# Wesley (zx-wt) <ZX_WT@ymail.com>, 2016-2017. +# Wesley (zx-wt) <ZX_WT@ymail.com>, 2016-2017, 2020. # cnieFIT <dtotncq@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-04-10 00:46+0000\n" -"Last-Translator: cnieFIT <dtotncq@gmail.com>\n" -"Language-Team: Chinese (Hong Kong) <https://hosted.weblate.org/projects/" -"godot-engine/godot/zh_Hant_HK/>\n" +"PO-Revision-Date: 2020-05-01 11:43+0000\n" +"Last-Translator: zx-wt <ZX_WT@ymail.com>\n" +"Language-Team: Chinese (Traditional, Hong Kong) <https://hosted.weblate.org/" +"projects/godot-engine/godot/zh_Hant_HK/>\n" "Language: zh_HK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.6-dev\n" +"X-Generator: Weblate 4.0.2\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp +#, fuzzy msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "" +msgstr "convert()的類型參數無效, 請使用 TYPE_* 常數。" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp msgid "Expected a string of length 1 (a character)." @@ -68,19 +69,19 @@ msgstr "" #: core/ustring.cpp msgid "KiB" -msgstr "" +msgstr "KiB" #: core/ustring.cpp msgid "MiB" -msgstr "" +msgstr "MiB" #: core/ustring.cpp msgid "GiB" -msgstr "" +msgstr "GiB" #: core/ustring.cpp msgid "TiB" -msgstr "" +msgstr "TiB" #: core/ustring.cpp msgid "PiB" @@ -88,20 +89,19 @@ msgstr "" #: core/ustring.cpp msgid "EiB" -msgstr "" +msgstr "PiB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "" +msgstr "自由" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "平均" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Mirror" -msgstr "錯誤!" +msgstr "對稱" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" @@ -112,9 +112,8 @@ msgid "Value:" msgstr "" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Insert Key Here" -msgstr "動晝插入關鍵幀?" +msgstr "在這插入關鍵幀" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -127,14 +126,12 @@ msgid "Delete Selected Key(s)" msgstr "刪除選中檔案" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Add Bezier Point" -msgstr "新增訊號" +msgstr "新增Bezier節點" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Move Bezier Points" -msgstr "下移" +msgstr "Bezier節點下移" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -158,9 +155,8 @@ msgid "Anim Change Transform" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Change Keyframe Value" -msgstr "動畫變化數值" +msgstr "動畫變化關鍵幀數值" #: editor/animation_track_editor.cpp msgid "Anim Change Call" @@ -199,7 +195,7 @@ 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" @@ -241,23 +237,21 @@ msgid "Add Track" msgstr "新增動畫軌跡" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation Looping" -msgstr "動畫縮放。" +msgstr "動畫循環" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Functions:" -msgstr "行為" +msgstr "" #: editor/animation_track_editor.cpp msgid "Audio Clips:" -msgstr "" +msgstr "聲音片段:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "動畫片段:" #: editor/animation_track_editor.cpp msgid "Change Track Path" @@ -272,9 +266,8 @@ msgid "Update Mode (How this property is set)" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "無干擾模式" +msgstr "模式" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" @@ -311,11 +304,11 @@ msgstr "發動" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "" +msgstr "捕捉" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "最近" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -337,7 +330,7 @@ msgstr "" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "" +msgstr "插入動畫幀" #: editor/animation_track_editor.cpp #, fuzzy @@ -447,16 +440,15 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "" +msgstr "沒有ROOT以新增新動畫軌跡" #: editor/animation_track_editor.cpp msgid "Invalid track for Bezier (no suitable sub-properties)" msgstr "" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Bezier Track" -msgstr "新增動畫軌跡" +msgstr "新增Bezier軌跡" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." @@ -571,14 +563,12 @@ msgid "Edit" msgstr "編輯" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation properties." -msgstr "新增動畫" +msgstr "動畫內容。" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Copy Tracks" -msgstr "複製參數" +msgstr "複製" #: editor/animation_track_editor.cpp msgid "Scale Selection" @@ -701,9 +691,8 @@ msgid "Select All/None" msgstr "不選" #: editor/animation_track_editor_plugins.cpp -#, fuzzy msgid "Add Audio Track Clip" -msgstr "新增動畫軌跡" +msgstr "新增聲音軌跡片段" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip Start Offset" @@ -734,18 +723,16 @@ msgid "Line Number:" msgstr "行數:" #: editor/code_editor.cpp -#, fuzzy msgid "%d replaced." -msgstr "取代" +msgstr "已取代 %d。" #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." msgstr "" #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "沒有相同" +msgstr "%d 相同。" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -795,7 +782,7 @@ msgstr "重設縮放比例" #: editor/code_editor.cpp msgid "Warnings" -msgstr "" +msgstr "警告" #: editor/code_editor.cpp msgid "Line and column numbers." @@ -817,18 +804,16 @@ msgid "Connect to Node:" msgstr "連到:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect to Script:" -msgstr "不能連到主機:" +msgstr "連到腳本:" #: editor/connections_dialog.cpp -#, fuzzy msgid "From Signal:" -msgstr "訊號:" +msgstr "來自訊號:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." -msgstr "" +msgstr "場景沒有含有任何腳本。" #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp @@ -856,17 +841,16 @@ msgid "Extra Call Arguments:" msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Receiver Method:" -msgstr "選擇模式" +msgstr "接收模式:" #: editor/connections_dialog.cpp msgid "Advanced" -msgstr "" +msgstr "進階" #: editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "延遲" #: editor/connections_dialog.cpp msgid "" @@ -875,16 +859,15 @@ msgstr "" #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "只限一次" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Cannot connect signal" -msgstr "連接訊號:" +msgstr "無法連接訊號" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -956,9 +939,8 @@ msgid "Are you sure you want to remove all connections from this signal?" msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Disconnect All" -msgstr "中斷" +msgstr "中斷全部" #: editor/connections_dialog.cpp #, fuzzy @@ -1142,7 +1124,7 @@ msgstr "刪除" #: editor/dependency_editor.cpp msgid "Owns" -msgstr "" +msgstr "擁有" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" @@ -1166,19 +1148,16 @@ msgid "Godot Engine contributors" msgstr "Godot Engine 貢獻者" #: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" -msgstr "專案設定" +msgstr "專案開荒人" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" -msgstr "開發者" +msgstr "主要開發者" #: editor/editor_about.cpp -#, fuzzy msgid "Project Manager " -msgstr "開啟 Project Manager?" +msgstr "開啟 Project Manager " #: editor/editor_about.cpp msgid "Developers" @@ -1210,7 +1189,7 @@ msgstr "白銀級捐款人" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "青銅捐款人" +msgstr "青銅級捐款人" #: editor/editor_about.cpp msgid "Donors" @@ -1304,14 +1283,12 @@ msgid "Add Effect" msgstr "新增效果" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" -msgstr "重新命名Autoload" +msgstr "重新命名Audio Bus" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Change Audio Bus Volume" -msgstr "動畫變化數值" +msgstr "變更Audio Bus聲量" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -1338,9 +1315,8 @@ msgid "Move Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" -msgstr "刪除選中檔案" +msgstr "刪除Bus Effect" #: editor/editor_audio_buses.cpp msgid "Drag & drop to rearrange." @@ -1348,7 +1324,7 @@ msgstr "" #: editor/editor_audio_buses.cpp msgid "Solo" -msgstr "" +msgstr "Solo" #: editor/editor_audio_buses.cpp msgid "Mute" @@ -1367,7 +1343,7 @@ msgstr "選項" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Duplicate" -msgstr "複製" +msgstr "再製" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1397,9 +1373,8 @@ msgid "Delete Audio Bus" msgstr "刪除佈局" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" -msgstr "複製" +msgstr "再製 Audio Bus" #: editor/editor_audio_buses.cpp #, fuzzy @@ -1407,9 +1382,8 @@ msgid "Reset Bus Volume" msgstr "重設縮放比例" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Move Audio Bus" -msgstr "移動" +msgstr "移動 Audio Bus" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As..." @@ -1428,9 +1402,8 @@ msgid "There is no '%s' file." msgstr "" #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Layout" -msgstr "儲存佈局" +msgstr "佈局" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." @@ -1483,7 +1456,7 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "無效名稱" +msgstr "無效名稱。" #: editor/editor_autoload_settings.cpp #, fuzzy @@ -1491,19 +1464,16 @@ msgid "Valid characters:" msgstr "有效字符:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Must not collide with an existing engine class name." -msgstr "有效名稱。" +msgstr "" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Must not collide with an existing built-in type name." -msgstr "有效名稱。" +msgstr "" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Must not collide with an existing global constant name." -msgstr "有效名稱。" +msgstr "" #: editor/editor_autoload_settings.cpp msgid "Keyword cannot be used as an autoload name." @@ -1571,7 +1541,7 @@ msgstr "路徑:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" -msgstr "" +msgstr "Node名稱" #: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp #: editor/editor_profiler.cpp editor/project_manager.cpp @@ -1602,16 +1572,15 @@ msgstr "正在更新場景..." #: editor/editor_data.cpp editor/editor_properties.cpp msgid "[empty]" -msgstr "" +msgstr "[空]" #: editor/editor_data.cpp msgid "[unsaved]" -msgstr "" +msgstr "[未儲存]" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first." -msgstr "請先儲存場景" +msgstr "請先選擇主要資料夾。" #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1674,9 +1643,8 @@ msgstr "" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp -#, fuzzy msgid "Custom debug template not found." -msgstr "未找到佈局名稱!" +msgstr "" #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp @@ -1685,23 +1653,20 @@ msgid "Custom release template not found." msgstr "" #: editor/editor_export.cpp platform/javascript/export/export.cpp -#, fuzzy msgid "Template file not found:" -msgstr "未找到佈局名稱!" +msgstr "" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "3D Editor" -msgstr "編輯器" +msgstr "3D編輯器" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Script Editor" -msgstr "開啟資料夾" +msgstr "" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1747,9 +1712,8 @@ msgid "(Editor Disabled, Properties Disabled)" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(Properties Disabled)" -msgstr "選擇模式" +msgstr "" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1799,9 +1763,8 @@ msgid "Unset" msgstr "" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Current Profile:" -msgstr "新增資料夾" +msgstr "" #: editor/editor_feature_profile.cpp msgid "Make Current" @@ -1881,15 +1844,13 @@ msgid "Copy Path" msgstr "複製路徑" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Open in File Manager" -msgstr "開啟 Project Manager?" +msgstr "在Project Manager開啟" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/filesystem_dock.cpp editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" -msgstr "開啟 Project Manager?" +msgstr "在Project Manager顯示" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp #, fuzzy @@ -1903,7 +1864,7 @@ msgstr "重新整理" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" -msgstr "所有類型" +msgstr "所有已知類型" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" @@ -1915,7 +1876,7 @@ msgstr "開啟檔案" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "開啟檔案" +msgstr "開啟(多個)檔案" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" @@ -1937,16 +1898,18 @@ msgid "Save a File" msgstr "儲存檔案" #: editor/editor_file_dialog.cpp +#, fuzzy msgid "Go Back" -msgstr "" +msgstr "向後" #: editor/editor_file_dialog.cpp +#, fuzzy msgid "Go Forward" -msgstr "" +msgstr "向前" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "向上" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" @@ -1975,14 +1938,12 @@ msgid "Move Favorite Down" msgstr "下移最愛" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to previous folder." -msgstr "無法新增資料夾" +msgstr "回到上一個資料夾。" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to next folder." -msgstr "無法新增資料夾" +msgstr "下一個資料夾" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp #, fuzzy @@ -2028,7 +1989,7 @@ msgstr "檔案:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "請用有效的副檔名" +msgstr "請用有效的副檔名。" #: editor/editor_file_system.cpp msgid "ScanSources" @@ -2069,13 +2030,12 @@ msgid "Description" msgstr "描述:" #: editor/editor_help.cpp -#, fuzzy msgid "Online Tutorials" -msgstr "關閉場景" +msgstr "Online教學" #: editor/editor_help.cpp msgid "Properties" -msgstr "" +msgstr "內客" #: editor/editor_help.cpp msgid "override:" @@ -2158,29 +2118,24 @@ msgid "Classes Only" msgstr "" #: editor/editor_help_search.cpp -#, fuzzy msgid "Methods Only" -msgstr "選擇模式" +msgstr "" #: editor/editor_help_search.cpp -#, fuzzy msgid "Signals Only" -msgstr "訊號" +msgstr "只限訊號" #: editor/editor_help_search.cpp -#, fuzzy msgid "Constants Only" -msgstr "常數" +msgstr "只限常數" #: editor/editor_help_search.cpp -#, fuzzy msgid "Properties Only" -msgstr "選擇模式" +msgstr "只限內容" #: editor/editor_help_search.cpp -#, fuzzy msgid "Theme Properties Only" -msgstr "選擇模式" +msgstr "" #: editor/editor_help_search.cpp msgid "Member Type" @@ -2191,9 +2146,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 #, fuzzy @@ -2205,14 +2159,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:" @@ -2231,9 +2183,8 @@ msgid "Output:" msgstr "" #: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "移除選項" +msgstr "複製選項" #: editor/editor_log.cpp editor/editor_network_profiler.cpp #: editor/editor_profiler.cpp editor/editor_properties.cpp @@ -2265,9 +2216,8 @@ msgid "%s/s" msgstr "" #: editor/editor_network_profiler.cpp -#, fuzzy msgid "Down" -msgstr "下載" +msgstr "" #: editor/editor_network_profiler.cpp msgid "Up" @@ -2322,14 +2272,12 @@ msgid "Save Resource As..." msgstr "把資源另存為..." #: editor/editor_node.cpp -#, fuzzy msgid "Can't open file for writing:" -msgstr "不能寫入,不能開啟檔案:" +msgstr "不能開啟檔案以供寫入:" #: editor/editor_node.cpp -#, fuzzy msgid "Requested file format unknown:" -msgstr "要求的檔案格式未知:" +msgstr "要求的檔案格式不明:" #: editor/editor_node.cpp msgid "Error while saving." @@ -3501,15 +3449,16 @@ msgstr "你是否忘了關鍵詞 'tool' ?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "不能執行腳本:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" msgstr "" #: editor/editor_sub_scene.cpp +#, fuzzy msgid "Select Node(s) to Import" -msgstr "" +msgstr "選擇要導入的Node(s)" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" @@ -3521,7 +3470,7 @@ msgstr "場景路徑:" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "從Node導入:" #: editor/export_template_manager.cpp #, fuzzy @@ -3542,59 +3491,66 @@ msgid "Download" msgstr "下載" #: editor/export_template_manager.cpp +#, fuzzy msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "Development builds未能提供官方export templates。" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "" +msgstr "(欠缺)" #: editor/export_template_manager.cpp +#, fuzzy msgid "(Current)" -msgstr "" +msgstr "(Current)" #: editor/export_template_manager.cpp +#, fuzzy msgid "Retrieving mirrors, please wait..." -msgstr "" +msgstr "接收 mirrors中, 請稍侯..." #: editor/export_template_manager.cpp +#, fuzzy msgid "Remove template version '%s'?" -msgstr "" +msgstr "移除版本 '%s' 的範本?" #: editor/export_template_manager.cpp +#, fuzzy msgid "Can't open export templates zip." -msgstr "" +msgstr "不能開啟export templates的zip壓縮檔。" #: editor/export_template_manager.cpp #, fuzzy msgid "Invalid version.txt format inside templates: %s." -msgstr "無效的 version.txt 格式 inside templates." +msgstr "範本文件: %s 中的 version.txt 格式無效。" #: editor/export_template_manager.cpp #, fuzzy msgid "No version.txt found inside templates." -msgstr "找不到version.txt inside templates." +msgstr "範本中找不到version.txt。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error creating path for templates:" -msgstr "載入字形出現錯誤" +msgstr "範本創造路徑時出現錯誤:" #: editor/export_template_manager.cpp +#, fuzzy msgid "Extracting Export Templates" -msgstr "" +msgstr "正在解壓Export Templates" #: editor/export_template_manager.cpp msgid "Importing:" -msgstr "導入中:" +msgstr "導入中:" #: editor/export_template_manager.cpp +#, fuzzy msgid "Error getting the list of mirrors." -msgstr "" +msgstr "取得mirrors列表時出錯。" #: editor/export_template_manager.cpp +#, fuzzy msgid "Error parsing JSON of mirror list. Please report this issue!" -msgstr "" +msgstr "parsing mirror列表的JSON出錯。 請回報此問題!" #: editor/export_template_manager.cpp #, fuzzy @@ -3605,8 +3561,9 @@ msgstr "找不到這個版本的下載連結。直接下載只適用於official #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy msgid "Can't resolve." -msgstr "" +msgstr "無法解決。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3624,8 +3581,9 @@ msgid "Request Failed." msgstr "請求失敗。" #: editor/export_template_manager.cpp +#, fuzzy msgid "Redirect Loop." -msgstr "" +msgstr "重新定向循環。" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3633,49 +3591,49 @@ msgid "Failed:" msgstr "失敗:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Complete." -msgstr "下載出現錯誤" +msgstr "下載完成。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "無法移除:\n" +msgstr "無法移除暫存檔:" #: editor/export_template_manager.cpp +#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" +"Templates安裝失敗。\n" +"出現問題的templates 存檔可以在 \"%s\" 中找到。" #: editor/export_template_manager.cpp #, fuzzy msgid "Error requesting URL:" -msgstr "請求時出現錯誤" +msgstr "請求URL時出現錯誤:" #: editor/export_template_manager.cpp #, fuzzy msgid "Connecting to Mirror..." -msgstr "連到..." +msgstr "正在連到Mirror..." #: editor/export_template_manager.cpp #, fuzzy msgid "Disconnected" -msgstr "中斷" +msgstr "斷線" #: editor/export_template_manager.cpp msgid "Resolving" -msgstr "" +msgstr "解決中" #: editor/export_template_manager.cpp msgid "Can't Resolve" -msgstr "" +msgstr "不能解決" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Connecting..." -msgstr "連到..." +msgstr "連接中..." #: editor/export_template_manager.cpp #, fuzzy @@ -3685,7 +3643,7 @@ msgstr "不能連接。" #: editor/export_template_manager.cpp #, fuzzy msgid "Connected" -msgstr "連到" +msgstr "已連線" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3695,63 +3653,61 @@ msgstr "請求中..." #: editor/export_template_manager.cpp #, fuzzy msgid "Downloading" -msgstr "下載出現錯誤" +msgstr "下載中" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connection Error" -msgstr "連到..." +msgstr "連接出錯" #: editor/export_template_manager.cpp +#, fuzzy msgid "SSL Handshake Error" -msgstr "" +msgstr "SSL Handshake出錯" #: editor/export_template_manager.cpp #, fuzzy msgid "Uncompressing Android Build Sources" -msgstr "導入中:" +msgstr "正在解壓Android Build Sources" #: editor/export_template_manager.cpp +#, fuzzy msgid "Current Version:" -msgstr "" +msgstr "當前版本:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Installed Versions:" -msgstr "無效副檔名" +msgstr "已安裝的版本:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install From File" -msgstr "從檔案下載" +msgstr "從檔案安裝" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove Template" -msgstr "移除選項" +msgstr "移除Template" #: editor/export_template_manager.cpp #, fuzzy msgid "Select Template File" -msgstr "要刪除選中檔案?" +msgstr "選取Template檔案" #: editor/export_template_manager.cpp #, fuzzy msgid "Godot Export Templates" -msgstr "管理輸出範本" +msgstr "Godot輸出範本" #: editor/export_template_manager.cpp +#, fuzzy msgid "Export Template Manager" -msgstr "" +msgstr "Export Template管理器" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Templates" -msgstr "移除選項" +msgstr "下載Templates" #: editor/export_template_manager.cpp msgid "Select mirror from list: (Shift+Click: Open in Browser)" -msgstr "" +msgstr "從清單中選擇鏡像: (Shift + 單擊: 在瀏覽器中打開)" #: editor/filesystem_dock.cpp #, fuzzy @@ -3759,77 +3715,73 @@ msgid "Favorites" msgstr "最愛:" #: editor/filesystem_dock.cpp +#, fuzzy msgid "Status: Import of file failed. Please fix file and reimport manually." -msgstr "" +msgstr "狀態:導入檔案失敗。請修正檔案並再手動導入。" #: editor/filesystem_dock.cpp +#, fuzzy msgid "Cannot move/rename resources root." -msgstr "" +msgstr "不能移動/重新命名 resources root." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "" +msgstr "不能移動資料夾到資料夾自身。" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error moving:" -msgstr "載入錯誤:" +msgstr "移動錯誤:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Error duplicating:" -msgstr "載入錯誤:" +msgstr "再製時出錯:" #: editor/filesystem_dock.cpp +#, fuzzy msgid "Unable to update dependencies:" -msgstr "" +msgstr "未能更新dependencies:" #: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided." -msgstr "" +msgstr "沒有提供名字。" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Provided name contains invalid characters." -msgstr "有效字符:" +msgstr "提供的名字含有無效字符。" #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "" +msgstr "具有此名稱的檔或資料夾已存在。" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Name contains invalid characters." -msgstr "有效字符:" +msgstr "名字含有無效字符。" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming file:" -msgstr "儲存TileSet時出現錯誤!" +msgstr "重新命名檔案:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "" +msgstr "重新命名資料夾:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating file:" -msgstr "複製" +msgstr "再製檔案:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicating folder:" -msgstr "複製" +msgstr "再製資料夾:" #: editor/filesystem_dock.cpp #, fuzzy msgid "New Inherited Scene" -msgstr "下一個腳本" +msgstr "新增 Inherited Scene" #: editor/filesystem_dock.cpp #, fuzzy msgid "Set As Main Scene" -msgstr "選擇主場景" +msgstr "設家成主場景" #: editor/filesystem_dock.cpp #, fuzzy @@ -3837,22 +3789,22 @@ msgid "Open Scenes" msgstr "開啓場景" #: editor/filesystem_dock.cpp +#, fuzzy msgid "Instance" -msgstr "" +msgstr "Instance" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to Favorites" -msgstr "最愛:" +msgstr "加到最愛" #: editor/filesystem_dock.cpp #, fuzzy msgid "Remove from Favorites" -msgstr "只限選中" +msgstr "從最愛中移除" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." -msgstr "" +msgstr "編輯Dependencies..." #: editor/filesystem_dock.cpp msgid "View Owners..." @@ -3864,9 +3816,8 @@ msgid "Rename..." msgstr "重新命名..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "Duplicate..." -msgstr "複製" +msgstr "再製..." #: editor/filesystem_dock.cpp #, fuzzy @@ -3874,37 +3825,33 @@ msgid "Move To..." msgstr "搬到..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "新增場景" +msgstr "新增場景..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Script..." -msgstr "下一個腳本" +msgstr "新增腳本..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Resource..." -msgstr "把資源另存為..." +msgstr "新增資源..." #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp msgid "Expand All" -msgstr "" +msgstr "全部展開" #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" -msgstr "關閉" +msgstr "全部折疊" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/project_manager.cpp editor/rename_dialog.cpp #: editor/scene_tree_dock.cpp msgid "Rename" -msgstr "重新命名..." +msgstr "重新命名" #: editor/filesystem_dock.cpp #, fuzzy @@ -3912,18 +3859,18 @@ msgid "Previous Folder/File" msgstr "上一個tab" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Next Folder/File" -msgstr "新增資料夾" +msgstr "下一個資料夾/檔案" #: editor/filesystem_dock.cpp +#, fuzzy msgid "Re-Scan Filesystem" -msgstr "" +msgstr "重新掃描檔案系統" #: editor/filesystem_dock.cpp #, fuzzy msgid "Toggle Split Mode" -msgstr "(不)顯示隱藏的文件" +msgstr "切換Split 模式" #: editor/filesystem_dock.cpp #, fuzzy @@ -3931,10 +3878,11 @@ msgid "Search files" msgstr "在幫助檔搜尋" #: editor/filesystem_dock.cpp +#, fuzzy msgid "" "Scanning Files,\n" "Please Wait..." -msgstr "" +msgstr "正在掃描檔案, 請稍候..." #: editor/filesystem_dock.cpp msgid "Move" @@ -3942,35 +3890,35 @@ msgstr "移動" #: editor/filesystem_dock.cpp msgid "There is already file or folder with the same name in this location." -msgstr "" +msgstr "此位置已存在同名的檔案或資料夾。" #: editor/filesystem_dock.cpp +#, fuzzy msgid "Overwrite" -msgstr "" +msgstr "覆蓋" #: editor/filesystem_dock.cpp #, fuzzy msgid "Create Scene" -msgstr "儲存場景" +msgstr "新增場景" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Create Script" -msgstr "" +msgstr "新增腳本" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Find in Files" -msgstr "多 %d 檔案" +msgstr "在檔案中本尋找" #: editor/find_in_files.cpp -#, fuzzy msgid "Find:" -msgstr "尋找" +msgstr "尋找:" #: editor/find_in_files.cpp -#, fuzzy msgid "Folder:" -msgstr "新增資料夾" +msgstr "資料夾:" #: editor/find_in_files.cpp #, fuzzy @@ -3978,169 +3926,166 @@ msgid "Filters:" msgstr "篩選:" #: editor/find_in_files.cpp +#, fuzzy msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." -msgstr "" +msgstr "包含下列副檔名的文件。在ProjectSettings增加或移除。" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find..." -msgstr "" +msgstr "尋找..." #: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp +#, fuzzy msgid "Replace..." -msgstr "" +msgstr "替換…" #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" msgstr "取消" #: editor/find_in_files.cpp -#, fuzzy msgid "Find: " -msgstr "尋找" +msgstr "尋找: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace: " -msgstr "取代" +msgstr "取代: " #: editor/find_in_files.cpp -#, fuzzy msgid "Replace all (no undo)" -msgstr "全部取代" +msgstr "全部取代(不可還原)" #: editor/find_in_files.cpp -#, fuzzy msgid "Searching..." -msgstr "儲存中..." +msgstr "搜尋中..." #: editor/find_in_files.cpp -#, fuzzy msgid "Search complete" -msgstr "在幫助檔搜尋" +msgstr "搜尋完成" #: editor/groups_editor.cpp +#, fuzzy msgid "Add to Group" -msgstr "" +msgstr "加到Group" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +msgstr "從Group中移除" #: editor/groups_editor.cpp -#, fuzzy msgid "Group name already exists." -msgstr "錯誤:動畫名稱已存在!" +msgstr "錯誤:group名稱已存在。" #: editor/groups_editor.cpp -#, fuzzy msgid "Invalid group name." -msgstr "無效名稱" +msgstr "無效group名稱。" #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "專案" +msgstr "重新命名Group" #: editor/groups_editor.cpp #, fuzzy msgid "Delete Group" -msgstr "刪除佈局" +msgstr "刪除Group" #: editor/groups_editor.cpp editor/node_dock.cpp +#, fuzzy msgid "Groups" -msgstr "" +msgstr "Groups" #: editor/groups_editor.cpp msgid "Nodes Not in Group" -msgstr "" +msgstr "不在Group內的Nodes" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp #, fuzzy msgid "Filter nodes" -msgstr "篩選:" +msgstr "篩選nodes:" #: editor/groups_editor.cpp msgid "Nodes in Group" -msgstr "" +msgstr "Group中的Nodes" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "空groups會被移除。" #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "開啟資料夾" +msgstr "Group編輯器" #: editor/groups_editor.cpp msgid "Manage Groups" -msgstr "" +msgstr "管理groups" #: editor/import/resource_importer_scene.cpp #, fuzzy msgid "Import as Single Scene" -msgstr "更新場景" +msgstr "導入為單一場景" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Animations" -msgstr "" +msgstr "以分開的動畫導入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "以分開的Materials導入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "以分開的物件導入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "以分開的物件+Materials導入" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "以分開的物件+動畫導入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "以分開的Materials+動畫導入" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "以分開的物件+Materials+動畫導入" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "導入為多個場景" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "導入為多個場景+Materials" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "導入場景" #: editor/import/resource_importer_scene.cpp msgid "Importing Scene..." -msgstr "" +msgstr "導入場景中..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" -msgstr "" +msgstr "光照圖生成中" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "" +msgstr "為Mesh生成中: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." -msgstr "" +msgstr "正在運行自定義腳本..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -9101,15 +9046,15 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "" +msgstr "等於 (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "" +msgstr "大於(>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "" +msgstr "大於或等於(>=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -9131,15 +9076,15 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "" +msgstr "小於 (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "" +msgstr "小於或等於 (<=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "" +msgstr "不等於 (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -10833,23 +10778,24 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "在Parent內移動Nodes" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "" +msgstr "再製Node" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." -msgstr "" +msgstr "不能在inherited scenes內reparent nodes,nodes順序不能改變。" #: editor/scene_tree_dock.cpp +#, fuzzy msgid "Node must belong to the edited scene to become root." -msgstr "" +msgstr "Node必須屬於已編輯的場景以成為root." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "" +msgstr "Instantiated scenes不能成為root" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10862,12 +10808,14 @@ msgid "Delete %d nodes?" msgstr "不選" #: editor/scene_tree_dock.cpp +#, fuzzy msgid "Delete the root node \"%s\"?" -msgstr "" +msgstr "删除root node \"%s\"?" #: editor/scene_tree_dock.cpp +#, fuzzy msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "删除root node \"%s\"?" #: editor/scene_tree_dock.cpp #, fuzzy @@ -12938,7 +12886,7 @@ msgstr "" #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "" +msgstr "當\"Exp Edit\" 啟用時,\"Min Value\" 必須大於0。" #: scene/gui/scroll_container.cpp msgid "" @@ -12949,7 +12897,7 @@ msgstr "" #: scene/gui/tree.cpp msgid "(Other)" -msgstr "" +msgstr "(其他)" #: scene/main/scene_tree.cpp msgid "" @@ -12966,23 +12914,22 @@ msgid "" msgstr "" #: scene/main/viewport.cpp +#, fuzzy msgid "Viewport size must be greater than 0 to render anything." -msgstr "" +msgstr "viewport大小必須大於0以渲染任何東西。" #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." -msgstr "無效字型" +msgstr "預覽來自無效來源。" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "無效字型" +msgstr "無效的SHADER來源。" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid comparison function for that type." -msgstr "無效字型" +msgstr "無效的函式類型對比。" #: servers/visual/shader_language.cpp msgid "Assignment to function." diff --git a/main/main.cpp b/main/main.cpp index dff7907e72..95449dd5cc 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -139,6 +139,7 @@ static DisplayServer::ScreenOrientation window_orientation = DisplayServer::SCRE static uint32_t window_flags = 0; static Size2i window_size = Size2i(1024, 600); static bool window_vsync_via_compositor = false; +static bool disable_wintab = false; static int init_screen = -1; static bool init_fullscreen = false; @@ -314,6 +315,7 @@ void Main::print_help(const char *p_binary) { OS::get_singleton()->print(" --enable-vsync-via-compositor When vsync is enabled, vsync via the OS' window compositor (Windows only).\n"); OS::get_singleton()->print(" --disable-vsync-via-compositor Disable vsync via the OS' window compositor (Windows only).\n"); OS::get_singleton()->print(" --single-window Use a single window (no separate subwindows).\n"); + OS::get_singleton()->print(" --disable-wintab Disable WinTab API and always use Windows Ink API for the pen input (Windows only).\n"); OS::get_singleton()->print("\n"); #endif @@ -595,6 +597,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph } else if (I->get() == "--gpu-abort") { // force windowed window Engine::singleton->abort_on_gpu_errors = true; + } else if (I->get() == "--disable-wintab") { + + disable_wintab = true; } else if (I->get() == "--single-window") { // force single window single_window = true; @@ -1079,6 +1084,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph OS::get_singleton()->_vsync_via_compositor = window_vsync_via_compositor; + if (!disable_wintab) { + // No "--disable_wintab" option + disable_wintab = GLOBAL_DEF("display/window/disable_wintab_api", false); + } + + OS::get_singleton()->_disable_wintab = disable_wintab; + /* todo restore OS::get_singleton()->_allow_layered = GLOBAL_DEF("display/window/per_pixel_transparency/allowed", false); video_mode.layered = GLOBAL_DEF("display/window/per_pixel_transparency/enabled", false); diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp index d38ddf3f90..550a919d0d 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -46,7 +46,7 @@ void CSGShape3D::set_use_collision(bool p_enable) { root_collision_instance = PhysicsServer3D::get_singleton()->body_create(PhysicsServer3D::BODY_MODE_STATIC); PhysicsServer3D::get_singleton()->body_set_state(root_collision_instance, PhysicsServer3D::BODY_STATE_TRANSFORM, get_global_transform()); PhysicsServer3D::get_singleton()->body_add_shape(root_collision_instance, root_collision_shape->get_rid()); - PhysicsServer3D::get_singleton()->body_set_space(root_collision_instance, get_world()->get_space()); + PhysicsServer3D::get_singleton()->body_set_space(root_collision_instance, get_world_3d()->get_space()); PhysicsServer3D::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id()); set_collision_layer(collision_layer); set_collision_mask(collision_mask); @@ -507,7 +507,7 @@ void CSGShape3D::_notification(int p_what) { root_collision_instance = PhysicsServer3D::get_singleton()->body_create(PhysicsServer3D::BODY_MODE_STATIC); PhysicsServer3D::get_singleton()->body_set_state(root_collision_instance, PhysicsServer3D::BODY_STATE_TRANSFORM, get_global_transform()); PhysicsServer3D::get_singleton()->body_add_shape(root_collision_instance, root_collision_shape->get_rid()); - PhysicsServer3D::get_singleton()->body_set_space(root_collision_instance, get_world()->get_space()); + PhysicsServer3D::get_singleton()->body_set_space(root_collision_instance, get_world_3d()->get_space()); PhysicsServer3D::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id()); set_collision_layer(collision_layer); set_collision_mask(collision_mask); diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 0316581604..06ab9e226d 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -103,15 +103,14 @@ GDScriptInstance *GDScript::_create_instance(const Variant **p_args, int p_argco instance->owner->set_script_instance(instance); /* STEP 2, INITIALIZE AND CONSTRUCT */ - { MutexLock lock(GDScriptLanguage::singleton->lock); - instances.insert(instance->owner); } - + if (p_argcount < 0) { + return instance; + } initializer->call(instance, p_args, p_argcount, r_error); - if (r_error.error != Callable::CallError::CALL_OK) { instance->script = Ref<GDScript>(); instance->owner->set_script_instance(nullptr); @@ -119,10 +118,8 @@ GDScriptInstance *GDScript::_create_instance(const Variant **p_args, int p_argco MutexLock lock(GDScriptLanguage::singleton->lock); instances.erase(p_owner); } - - ERR_FAIL_COND_V(r_error.error != Callable::CallError::CALL_OK, nullptr); //error constructing + ERR_FAIL_V_MSG(nullptr, "Error constructing a GDScriptInstance."); } - //@TODO make thread safe return instance; } diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 7ad0682637..ab3228d076 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -1427,6 +1427,7 @@ static bool _guess_identifier_type_from_base(GDScriptCompletionContext &p_contex // Variable used in the same expression return false; } + if (_guess_expression_type(p_context, m.expression, r_type)) { return true; } @@ -3490,6 +3491,17 @@ Error GDScriptLanguage::lookup_code(const String &p_code, const String &p_symbol return OK; } } break; + case GDScriptParser::COMPLETION_TYPE_HINT: { + + GDScriptParser::DataType base_type = context._class->base_type; + base_type.has_type = true; + base_type.kind = GDScriptParser::DataType::CLASS; + base_type.class_type = const_cast<GDScriptParser::ClassNode *>(context._class); + + if (_lookup_symbol_from_base(base_type, p_symbol, false, r_result) == OK) { + return OK; + } + } break; default: { } } diff --git a/modules/gdscript/gdscript_functions.cpp b/modules/gdscript/gdscript_functions.cpp index 58161d6f53..0199af642f 100644 --- a/modules/gdscript/gdscript_functions.cpp +++ b/modules/gdscript/gdscript_functions.cpp @@ -1197,8 +1197,7 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_ return; } } - - r_ret = gdscr->_new(nullptr, 0, r_error); + r_ret = gdscr->_new(nullptr, -1 /*skip initializer*/, r_error); GDScriptInstance *ins = static_cast<GDScriptInstance *>(static_cast<Object *>(r_ret)->get_script_instance()); Ref<GDScript> gd_ref = ins->get_script(); diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index a37fc579e7..17077567c7 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -4033,7 +4033,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { if (!_enter_indent_block(block)) { - _set_error("Indented block expected."); + _set_error(vformat("Indented block expected after declaration of \"%s\" function.", function->name)); return; } @@ -8571,7 +8571,13 @@ Error GDScriptParser::_parse(const String &p_base_path) { _set_error("Parse error: " + tokenizer->get_token_error()); } - if (error_set && !for_completion) { + bool for_completion_error_set = false; + if (error_set && for_completion) { + for_completion_error_set = true; + error_set = false; + } + + if (error_set) { return ERR_PARSE_ERROR; } @@ -8601,6 +8607,10 @@ Error GDScriptParser::_parse(const String &p_base_path) { // Resolve the function blocks _check_class_blocks_types(main_class); + if (for_completion_error_set) { + error_set = true; + } + if (error_set) { return ERR_PARSE_ERROR; } diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index df7c2f397f..0dbefbb39f 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -80,7 +80,7 @@ bool GridMap::_set(const StringName &p_name, const Variant &p_value) { RS::get_singleton()->get_singleton()->instance_set_base(bm.instance, bm.mesh->get_rid()); RS::get_singleton()->instance_attach_object_instance_id(bm.instance, get_instance_id()); if (is_inside_tree()) { - RS::get_singleton()->instance_set_scenario(bm.instance, get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(bm.instance, get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_transform(bm.instance, get_global_transform()); } baked_meshes.push_back(bm); @@ -536,7 +536,7 @@ bool GridMap::_octant_update(const OctantKey &p_key) { RS::get_singleton()->instance_set_base(instance, mm); if (is_inside_tree()) { - RS::get_singleton()->instance_set_scenario(instance, get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(instance, get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_transform(instance, get_global_transform()); } @@ -577,15 +577,15 @@ void GridMap::_octant_enter_world(const OctantKey &p_key) { ERR_FAIL_COND(!octant_map.has(p_key)); Octant &g = *octant_map[p_key]; PhysicsServer3D::get_singleton()->body_set_state(g.static_body, PhysicsServer3D::BODY_STATE_TRANSFORM, get_global_transform()); - PhysicsServer3D::get_singleton()->body_set_space(g.static_body, get_world()->get_space()); + PhysicsServer3D::get_singleton()->body_set_space(g.static_body, get_world_3d()->get_space()); if (g.collision_debug_instance.is_valid()) { - RS::get_singleton()->instance_set_scenario(g.collision_debug_instance, get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(g.collision_debug_instance, get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_transform(g.collision_debug_instance, get_global_transform()); } for (int i = 0; i < g.multimesh_instances.size(); i++) { - RS::get_singleton()->instance_set_scenario(g.multimesh_instances[i].instance, get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(g.multimesh_instances[i].instance, get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_transform(g.multimesh_instances[i].instance, get_global_transform()); } @@ -684,7 +684,7 @@ void GridMap::_notification(int p_what) { } for (int i = 0; i < baked_meshes.size(); i++) { - RS::get_singleton()->instance_set_scenario(baked_meshes[i].instance, get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(baked_meshes[i].instance, get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_transform(baked_meshes[i].instance, get_global_transform()); } @@ -1054,7 +1054,7 @@ void GridMap::make_baked_meshes(bool p_gen_lightmap_uv, float p_lightmap_uv_texe RS::get_singleton()->get_singleton()->instance_set_base(bm.instance, bm.mesh->get_rid()); RS::get_singleton()->instance_attach_object_instance_id(bm.instance, get_instance_id()); if (is_inside_tree()) { - RS::get_singleton()->instance_set_scenario(bm.instance, get_world()->get_scenario()); + RS::get_singleton()->instance_set_scenario(bm.instance, get_world_3d()->get_scenario()); RS::get_singleton()->instance_set_transform(bm.instance, get_global_transform()); } diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp index 9c3101945a..9abbac6a0b 100644 --- a/modules/gridmap/grid_map_editor_plugin.cpp +++ b/modules/gridmap/grid_map_editor_plugin.cpp @@ -556,7 +556,7 @@ void GridMapEditor::_set_clipboard_data() { item.cell_item = itm; item.grid_offset = Vector3(i, j, k) - selection.begin; item.orientation = node->get_cell_item_orientation(i, j, k); - item.instance = RenderingServer::get_singleton()->instance_create2(mesh->get_rid(), get_tree()->get_root()->get_world()->get_scenario()); + item.instance = RenderingServer::get_singleton()->instance_create2(mesh->get_rid(), get_tree()->get_root()->get_world_3d()->get_scenario()); clipboard_items.push_back(item); } @@ -1083,12 +1083,12 @@ void GridMapEditor::_notification(int p_what) { for (int i = 0; i < 3; i++) { grid[i] = RS::get_singleton()->mesh_create(); - grid_instance[i] = RS::get_singleton()->instance_create2(grid[i], get_tree()->get_root()->get_world()->get_scenario()); - selection_level_instance[i] = RenderingServer::get_singleton()->instance_create2(selection_level_mesh[i], get_tree()->get_root()->get_world()->get_scenario()); + grid_instance[i] = RS::get_singleton()->instance_create2(grid[i], get_tree()->get_root()->get_world_3d()->get_scenario()); + selection_level_instance[i] = RenderingServer::get_singleton()->instance_create2(selection_level_mesh[i], get_tree()->get_root()->get_world_3d()->get_scenario()); } - selection_instance = RenderingServer::get_singleton()->instance_create2(selection_mesh, get_tree()->get_root()->get_world()->get_scenario()); - paste_instance = RenderingServer::get_singleton()->instance_create2(paste_mesh, get_tree()->get_root()->get_world()->get_scenario()); + selection_instance = RenderingServer::get_singleton()->instance_create2(selection_mesh, get_tree()->get_root()->get_world_3d()->get_scenario()); + paste_instance = RenderingServer::get_singleton()->instance_create2(paste_mesh, get_tree()->get_root()->get_world_3d()->get_scenario()); _update_selection_transform(); _update_paste_indicator(); @@ -1168,7 +1168,7 @@ void GridMapEditor::_update_cursor_instance() { Ref<Mesh> mesh = node->get_mesh_library()->get_item_mesh(selected_palette); if (!mesh.is_null() && mesh->get_rid().is_valid()) { - cursor_instance = RenderingServer::get_singleton()->instance_create2(mesh->get_rid(), get_tree()->get_root()->get_world()->get_scenario()); + cursor_instance = RenderingServer::get_singleton()->instance_create2(mesh->get_rid(), get_tree()->get_root()->get_world_3d()->get_scenario()); RenderingServer::get_singleton()->instance_set_transform(cursor_instance, cursor_transform); } } diff --git a/modules/mono/utils/string_utils.cpp b/modules/mono/utils/string_utils.cpp index 907811355f..67b264d803 100644 --- a/modules/mono/utils/string_utils.cpp +++ b/modules/mono/utils/string_utils.cpp @@ -196,16 +196,6 @@ String str_format(const char *p_format, ...) { return res; } -// va_copy was defined in the C99, but not in C++ standards before C++11. -// When you compile C++ without --std=c++<XX> option, compilers still define -// va_copy, otherwise you have to use the internal version (__va_copy). -#if !defined(va_copy) -#if defined(__GNUC__) -#define va_copy(d, s) __va_copy((d), (s)) -#else -#define va_copy(d, s) ((d) = (s)) -#endif -#endif #if defined(MINGW_ENABLED) || defined(_MSC_VER) && _MSC_VER < 1900 #define gd_vsnprintf(m_buffer, m_count, m_format, m_args_copy) vsnprintf_s(m_buffer, m_count, _TRUNCATE, m_format, m_args_copy) diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java b/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java index 7cf32b00fe..a0f8bb8cb7 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java @@ -36,6 +36,7 @@ import android.content.pm.PackageManager; import android.content.pm.PermissionInfo; import android.os.Build; import android.support.v4.content.ContextCompat; +import android.util.Log; import java.util.ArrayList; import java.util.List; import org.godotengine.godot.Godot; @@ -46,6 +47,8 @@ import org.godotengine.godot.Godot; */ public final class PermissionsUtil { + private static final String TAG = PermissionsUtil.class.getSimpleName(); + static final int REQUEST_RECORD_AUDIO_PERMISSION = 1; static final int REQUEST_CAMERA_PERMISSION = 2; static final int REQUEST_VIBRATE_PERMISSION = 3; @@ -113,8 +116,8 @@ public final class PermissionsUtil { dangerousPermissions.add(manifestPermission); } } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - return false; + // Skip this permission and continue. + Log.w(TAG, "Unable to identify permission " + manifestPermission, e); } } @@ -153,8 +156,8 @@ public final class PermissionsUtil { dangerousPermissions.add(manifestPermission); } } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - return new String[0]; + // Skip this permission and continue. + Log.w(TAG, "Unable to identify permission " + manifestPermission, e); } } diff --git a/platform/linuxbsd/display_server_x11.cpp b/platform/linuxbsd/display_server_x11.cpp index e38b0c13d0..dd9298d667 100644 --- a/platform/linuxbsd/display_server_x11.cpp +++ b/platform/linuxbsd/display_server_x11.cpp @@ -254,13 +254,16 @@ bool DisplayServerX11::_refresh_device_info() { bool absolute_mode = false; int resolution_x = 0; int resolution_y = 0; - double range_min_x = 0; - double range_min_y = 0; - double range_max_x = 0; - double range_max_y = 0; - int pressure_resolution = 0; - int tilt_resolution_x = 0; - int tilt_resolution_y = 0; + double abs_x_min = 0; + double abs_x_max = 0; + double abs_y_min = 0; + double abs_y_max = 0; + double pressure_min = 0; + double pressure_max = 0; + double tilt_x_min = 0; + double tilt_x_max = 0; + double tilt_y_min = 0; + double tilt_y_max = 0; for (int j = 0; j < dev->num_classes; j++) { #ifdef TOUCH_ENABLED if (dev->classes[j]->type == XITouchClass && ((XITouchClassInfo *)dev->classes[j])->mode == XIDirectTouch) { @@ -272,23 +275,23 @@ bool DisplayServerX11::_refresh_device_info() { if (class_info->number == VALUATOR_ABSX && class_info->mode == XIModeAbsolute) { resolution_x = class_info->resolution; - range_min_x = class_info->min; - range_max_x = class_info->max; + abs_x_min = class_info->min; + abs_y_max = class_info->max; absolute_mode = true; } else if (class_info->number == VALUATOR_ABSY && class_info->mode == XIModeAbsolute) { resolution_y = class_info->resolution; - range_min_y = class_info->min; - range_max_y = class_info->max; + abs_y_min = class_info->min; + abs_y_max = class_info->max; absolute_mode = true; } else if (class_info->number == VALUATOR_PRESSURE && class_info->mode == XIModeAbsolute) { - pressure_resolution = (class_info->max - class_info->min); - if (pressure_resolution == 0) pressure_resolution = 1; + pressure_min = class_info->min; + pressure_max = class_info->max; } else if (class_info->number == VALUATOR_TILTX && class_info->mode == XIModeAbsolute) { - tilt_resolution_x = (class_info->max - class_info->min); - if (tilt_resolution_x == 0) tilt_resolution_x = 1; + tilt_x_min = class_info->min; + tilt_x_max = class_info->max; } else if (class_info->number == VALUATOR_TILTY && class_info->mode == XIModeAbsolute) { - tilt_resolution_y = (class_info->max - class_info->min); - if (tilt_resolution_y == 0) tilt_resolution_y = 1; + tilt_x_min = class_info->min; + tilt_x_max = class_info->max; } } } @@ -299,18 +302,19 @@ bool DisplayServerX11::_refresh_device_info() { if (absolute_mode) { // If no resolution was reported, use the min/max ranges. if (resolution_x <= 0) { - resolution_x = (range_max_x - range_min_x) * abs_resolution_range_mult; + resolution_x = (abs_x_max - abs_x_min) * abs_resolution_range_mult; } if (resolution_y <= 0) { - resolution_y = (range_max_y - range_min_y) * abs_resolution_range_mult; + resolution_y = (abs_y_max - abs_y_min) * abs_resolution_range_mult; } - xi.absolute_devices[dev->deviceid] = Vector2(abs_resolution_mult / resolution_x, abs_resolution_mult / resolution_y); print_verbose("XInput: Absolute pointing device: " + String(dev->name)); } xi.pressure = 0; - xi.pen_devices[dev->deviceid] = Vector3(pressure_resolution, tilt_resolution_x, tilt_resolution_y); + xi.pen_pressure_range[dev->deviceid] = Vector2(pressure_min, pressure_max); + xi.pen_tilt_x_range[dev->deviceid] = Vector2(tilt_x_min, tilt_x_max); + xi.pen_tilt_y_range[dev->deviceid] = Vector2(tilt_y_min, tilt_y_max); } XIFreeDeviceInfo(info); @@ -2353,6 +2357,10 @@ void DisplayServerX11::process_events() { // Is the current mouse mode one where it needs to be grabbed. bool mouse_mode_grab = mouse_mode == MOUSE_MODE_CAPTURED || mouse_mode == MOUSE_MODE_CONFINED; + xi.pressure = 0; + xi.tilt = Vector2(); + xi.pressure_supported = false; + while (XPending(x11_display) > 0) { XEvent event; XNextEvent(x11_display, &event); @@ -2399,9 +2407,6 @@ void DisplayServerX11::process_events() { double rel_x = 0.0; double rel_y = 0.0; - double pressure = 0.0; - double tilt_x = 0.0; - double tilt_y = 0.0; if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_ABSX)) { rel_x = *values; @@ -2414,24 +2419,41 @@ void DisplayServerX11::process_events() { } if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_PRESSURE)) { - pressure = *values; + Map<int, Vector2>::Element *pen_pressure = xi.pen_pressure_range.find(device_id); + if (pen_pressure) { + Vector2 pen_pressure_range = pen_pressure->value(); + if (pen_pressure_range != Vector2()) { + xi.pressure_supported = true; + xi.pressure = (*values - pen_pressure_range[0]) / + (pen_pressure_range[1] - pen_pressure_range[0]); + } + } + values++; } if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_TILTX)) { - tilt_x = *values; + Map<int, Vector2>::Element *pen_tilt_x = xi.pen_tilt_x_range.find(device_id); + if (pen_tilt_x) { + Vector2 pen_tilt_x_range = pen_tilt_x->value(); + if (pen_tilt_x_range != Vector2()) { + xi.tilt.x = ((*values - pen_tilt_x_range[0]) / (pen_tilt_x_range[1] - pen_tilt_x_range[0])) * 2 - 1; + } + } + values++; } if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_TILTY)) { - tilt_y = *values; - } + Map<int, Vector2>::Element *pen_tilt_y = xi.pen_tilt_y_range.find(device_id); + if (pen_tilt_y) { + Vector2 pen_tilt_y_range = pen_tilt_y->value(); + if (pen_tilt_y_range != Vector2()) { + xi.tilt.y = ((*values - pen_tilt_y_range[0]) / (pen_tilt_y_range[1] - pen_tilt_y_range[0])) * 2 - 1; + } + } - Map<int, Vector3>::Element *pen_info = xi.pen_devices.find(device_id); - if (pen_info) { - Vector3 mult = pen_info->value(); - if (mult.x != 0.0) xi.pressure = pressure / mult.x; - if ((mult.y != 0.0) && (mult.z != 0.0)) xi.tilt = Vector2(tilt_x / mult.y, tilt_y / mult.z); + values++; } // https://bugs.freedesktop.org/show_bug.cgi?id=71609 @@ -2763,7 +2785,11 @@ void DisplayServerX11::process_events() { mm.instance(); mm->set_window_id(window_id); - mm->set_pressure(xi.pressure); + if (xi.pressure_supported) { + mm->set_pressure(xi.pressure); + } else { + mm->set_pressure((mouse_get_button_state() & (1 << (BUTTON_LEFT - 1))) ? 1.0f : 0.0f); + } mm->set_tilt(xi.tilt); // Make the absolute position integral so it doesn't look _too_ weird :) diff --git a/platform/linuxbsd/display_server_x11.h b/platform/linuxbsd/display_server_x11.h index 8f090d3fad..b5ea71f72a 100644 --- a/platform/linuxbsd/display_server_x11.h +++ b/platform/linuxbsd/display_server_x11.h @@ -170,10 +170,13 @@ class DisplayServerX11 : public DisplayServer { int opcode; Vector<int> touch_devices; Map<int, Vector2> absolute_devices; - Map<int, Vector3> pen_devices; + Map<int, Vector2> pen_pressure_range; + Map<int, Vector2> pen_tilt_x_range; + Map<int, Vector2> pen_tilt_y_range; XIEventMask all_event_mask; Map<int, Vector2> state; double pressure; + bool pressure_supported; Vector2 tilt; Vector2 mouse_pos_to_filter; Vector2 relative_motion; diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index e4fe7f04d0..6b450fb452 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -36,10 +36,6 @@ #include <avrt.h> -#ifndef WM_POINTERUPDATE -#define WM_POINTERUPDATE 0x0245 -#endif - #ifdef DEBUG_ENABLED static String format_error_message(DWORD id) { @@ -545,6 +541,10 @@ void DisplayServerWindows::delete_sub_window(WindowID p_window) { } #endif + if (!OS::get_singleton()->is_wintab_disabled() && wintab_available && windows[p_window].wtctx) { + wintab_WTClose(windows[p_window].wtctx); + windows[p_window].wtctx = 0; + } DestroyWindow(windows[p_window].hWnd); windows.erase(p_window); } @@ -1849,7 +1849,11 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA alt_mem = false; }; - return 0; // Return To The Message Loop + if (!OS::get_singleton()->is_wintab_disabled() && wintab_available && windows[window_id].wtctx) { + wintab_WTEnable(windows[window_id].wtctx, GET_WM_ACTIVATE_STATE(wParam, lParam)); + } + + return 0; // Return To The Message Loop } case WM_GETMINMAXINFO: { if (windows[window_id].resizable && !windows[window_id].fullscreen) { @@ -1929,6 +1933,8 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA mm->set_shift(shift_mem); mm->set_alt(alt_mem); + mm->set_pressure((raw->data.mouse.ulButtons & RI_MOUSE_LEFT_BUTTON_DOWN) ? 1.0f : 0.0f); + mm->set_button_mask(last_button_state); Point2i c(windows[window_id].width / 2, windows[window_id].height / 2); @@ -1977,6 +1983,42 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA } delete[] lpb; } break; + case WT_CSRCHANGE: + case WT_PROXIMITY: { + if (!OS::get_singleton()->is_wintab_disabled() && wintab_available && windows[window_id].wtctx) { + AXIS pressure; + if (wintab_WTInfo(WTI_DEVICES + windows[window_id].wtlc.lcDevice, DVC_NPRESSURE, &pressure)) { + windows[window_id].min_pressure = int(pressure.axMin); + windows[window_id].max_pressure = int(pressure.axMax); + } + AXIS orientation[3]; + if (wintab_WTInfo(WTI_DEVICES + windows[window_id].wtlc.lcDevice, DVC_ORIENTATION, &orientation)) { + windows[window_id].tilt_supported = orientation[0].axResolution && orientation[1].axResolution; + } + return 0; + } + } break; + case WT_PACKET: { + if (!OS::get_singleton()->is_wintab_disabled() && wintab_available && windows[window_id].wtctx) { + PACKET packet; + if (wintab_WTPacket(windows[window_id].wtctx, wParam, &packet)) { + + float pressure = float(packet.pkNormalPressure - windows[window_id].min_pressure) / float(windows[window_id].max_pressure - windows[window_id].min_pressure); + windows[window_id].last_pressure = pressure; + windows[window_id].last_pressure_update = 0; + + double azim = (packet.pkOrientation.orAzimuth / 10.0f) * (Math_PI / 180); + double alt = Math::tan((Math::abs(packet.pkOrientation.orAltitude / 10.0f)) * (Math_PI / 180)); + + if (windows[window_id].tilt_supported) { + windows[window_id].last_tilt = Vector2(Math::atan(Math::sin(azim) / alt), Math::atan(Math::cos(azim) / alt)); + } else { + windows[window_id].last_tilt = Vector2(); + } + } + return 0; + } + } break; case WM_POINTERUPDATE: { if (mouse_mode == MOUSE_MODE_CAPTURED && use_raw_input) { break; @@ -2038,8 +2080,14 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA mm.instance(); mm->set_window_id(window_id); - mm->set_pressure(pen_info.pressure ? (float)pen_info.pressure / 1024 : 0); - mm->set_tilt(Vector2(pen_info.tiltX ? (float)pen_info.tiltX / 90 : 0, pen_info.tiltY ? (float)pen_info.tiltY / 90 : 0)); + if (pen_info.penMask & PEN_MASK_PRESSURE) { + mm->set_pressure((float)pen_info.pressure / 1024); + } else { + mm->set_pressure((HIWORD(wParam) & POINTER_MESSAGE_FLAG_FIRSTBUTTON) ? 1.0f : 0.0f); + } + if ((pen_info.penMask & PEN_MASK_TILT_X) && (pen_info.penMask & PEN_MASK_TILT_Y)) { + mm->set_tilt(Vector2((float)pen_info.tiltX / 90, (float)pen_info.tiltY / 90)); + } mm->set_control((wParam & MK_CONTROL) != 0); mm->set_shift((wParam & MK_SHIFT) != 0); @@ -2138,6 +2186,22 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA mm->set_shift((wParam & MK_SHIFT) != 0); mm->set_alt(alt_mem); + if (!OS::get_singleton()->is_wintab_disabled() && wintab_available && windows[window_id].wtctx) { + // Note: WinTab sends both WT_PACKET and WM_xBUTTONDOWN/UP/MOUSEMOVE events, use mouse 1/0 pressure only when last_pressure was not update recently. + if (windows[window_id].last_pressure_update < 10) { + windows[window_id].last_pressure_update++; + } else { + windows[window_id].last_tilt = Vector2(); + windows[window_id].last_pressure = (wParam & MK_LBUTTON) ? 1.0f : 0.0f; + } + } else { + windows[window_id].last_tilt = Vector2(); + windows[window_id].last_pressure = (wParam & MK_LBUTTON) ? 1.0f : 0.0f; + } + + mm->set_pressure(windows[window_id].last_pressure); + mm->set_tilt(windows[window_id].last_tilt); + mm->set_button_mask(last_button_state); mm->set_position(Vector2(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))); @@ -2759,6 +2823,39 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode, DragAcceptFiles(wd.hWnd, true); + if (!OS::get_singleton()->is_wintab_disabled() && wintab_available) { + wintab_WTInfo(WTI_DEFSYSCTX, 0, &wd.wtlc); + wd.wtlc.lcOptions |= CXO_MESSAGES; + wd.wtlc.lcPktData = PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE | PK_ORIENTATION; + wd.wtlc.lcMoveMask = PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE; + wd.wtlc.lcPktMode = 0; + wd.wtlc.lcOutOrgX = 0; + wd.wtlc.lcOutExtX = wd.wtlc.lcInExtX; + wd.wtlc.lcOutOrgY = 0; + wd.wtlc.lcOutExtY = -wd.wtlc.lcInExtY; + wd.wtctx = wintab_WTOpen(wd.hWnd, &wd.wtlc, false); + if (wd.wtctx) { + wintab_WTEnable(wd.wtctx, true); + AXIS pressure; + if (wintab_WTInfo(WTI_DEVICES + wd.wtlc.lcDevice, DVC_NPRESSURE, &pressure)) { + wd.min_pressure = int(pressure.axMin); + wd.max_pressure = int(pressure.axMax); + } + AXIS orientation[3]; + if (wintab_WTInfo(WTI_DEVICES + wd.wtlc.lcDevice, DVC_ORIENTATION, &orientation)) { + wd.tilt_supported = orientation[0].axResolution && orientation[1].axResolution; + } + } else { + ERR_PRINT("WinTab context creation falied."); + } + } else { + wd.wtctx = 0; + } + + wd.last_pressure = 0; + wd.last_pressure_update = 0; + wd.last_tilt = Vector2(); + // IME wd.im_himc = ImmGetContext(wd.hWnd); ImmReleaseContext(wd.hWnd, wd.im_himc); @@ -2776,6 +2873,15 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode, return id; } +// WinTab API +bool DisplayServerWindows::wintab_available = false; +WTOpenPtr DisplayServerWindows::wintab_WTOpen = nullptr; +WTClosePtr DisplayServerWindows::wintab_WTClose = nullptr; +WTInfoPtr DisplayServerWindows::wintab_WTInfo = nullptr; +WTPacketPtr DisplayServerWindows::wintab_WTPacket = nullptr; +WTEnablePtr DisplayServerWindows::wintab_WTEnable = nullptr; + +// Windows Ink API GetPointerTypePtr DisplayServerWindows::win8p_GetPointerType = nullptr; GetPointerPenInfoPtr DisplayServerWindows::win8p_GetPointerPenInfo = nullptr; @@ -2787,7 +2893,19 @@ typedef enum _SHC_PROCESS_DPI_AWARENESS { DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, WindowMode p_mode, uint32_t p_flags, const Vector2i &p_resolution, Error &r_error) { - //Note: Functions for pen input, available on Windows 8+ + //Note: Wacom WinTab driver API for pen input, for devices incompatible with Windows Ink. + HMODULE wintab_lib = LoadLibraryW(L"wintab32.dll"); + if (wintab_lib) { + wintab_WTOpen = (WTOpenPtr)GetProcAddress(wintab_lib, "WTOpenW"); + wintab_WTClose = (WTClosePtr)GetProcAddress(wintab_lib, "WTClose"); + wintab_WTInfo = (WTInfoPtr)GetProcAddress(wintab_lib, "WTInfoW"); + wintab_WTPacket = (WTPacketPtr)GetProcAddress(wintab_lib, "WTPacket"); + wintab_WTEnable = (WTEnablePtr)GetProcAddress(wintab_lib, "WTEnable"); + + wintab_available = wintab_WTOpen && wintab_WTClose && wintab_WTInfo && wintab_WTPacket && wintab_WTEnable; + } + + //Note: Windows Ink API for pen input, available on Windows 8+ only. HMODULE user32_lib = LoadLibraryW(L"user32.dll"); if (user32_lib) { win8p_GetPointerType = (GetPointerTypePtr)GetProcAddress(user32_lib, "GetPointerType"); @@ -3004,7 +3122,10 @@ DisplayServerWindows::~DisplayServerWindows() { context_vulkan->window_destroy(MAIN_WINDOW_ID); } #endif - + if (wintab_available && windows[MAIN_WINDOW_ID].wtctx) { + wintab_WTClose(windows[MAIN_WINDOW_ID].wtctx); + windows[MAIN_WINDOW_ID].wtctx = 0; + } DestroyWindow(windows[MAIN_WINDOW_ID].hWnd); } } diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index 6243f54cfa..4f5bdbac5b 100644 --- a/platform/windows/display_server_windows.h +++ b/platform/windows/display_server_windows.h @@ -66,6 +66,87 @@ #include <windows.h> #include <windowsx.h> +// WinTab API +#define WT_PACKET 0x7FF0 +#define WT_PROXIMITY 0x7FF5 +#define WT_INFOCHANGE 0x7FF6 +#define WT_CSRCHANGE 0x7FF7 + +#define WTI_DEFSYSCTX 4 +#define WTI_DEVICES 100 +#define DVC_NPRESSURE 15 +#define DVC_TPRESSURE 16 +#define DVC_ORIENTATION 17 +#define DVC_ROTATION 18 + +#define CXO_MESSAGES 0x0004 +#define PK_NORMAL_PRESSURE 0x0400 +#define PK_TANGENT_PRESSURE 0x0800 +#define PK_ORIENTATION 0x1000 + +typedef struct tagLOGCONTEXTW { + WCHAR lcName[40]; + UINT lcOptions; + UINT lcStatus; + UINT lcLocks; + UINT lcMsgBase; + UINT lcDevice; + UINT lcPktRate; + DWORD lcPktData; + DWORD lcPktMode; + DWORD lcMoveMask; + DWORD lcBtnDnMask; + DWORD lcBtnUpMask; + LONG lcInOrgX; + LONG lcInOrgY; + LONG lcInOrgZ; + LONG lcInExtX; + LONG lcInExtY; + LONG lcInExtZ; + LONG lcOutOrgX; + LONG lcOutOrgY; + LONG lcOutOrgZ; + LONG lcOutExtX; + LONG lcOutExtY; + LONG lcOutExtZ; + DWORD lcSensX; + DWORD lcSensY; + DWORD lcSensZ; + BOOL lcSysMode; + int lcSysOrgX; + int lcSysOrgY; + int lcSysExtX; + int lcSysExtY; + DWORD lcSysSensX; + DWORD lcSysSensY; +} LOGCONTEXTW; + +typedef struct tagAXIS { + LONG axMin; + LONG axMax; + UINT axUnits; + DWORD axResolution; +} AXIS; + +typedef struct tagORIENTATION { + int orAzimuth; + int orAltitude; + int orTwist; +} ORIENTATION; + +typedef struct tagPACKET { + int pkNormalPressure; + int pkTangentPressure; + ORIENTATION pkOrientation; +} PACKET; + +typedef HANDLE(WINAPI *WTOpenPtr)(HWND p_window, LOGCONTEXTW *p_ctx, BOOL p_enable); +typedef BOOL(WINAPI *WTClosePtr)(HANDLE p_ctx); +typedef UINT(WINAPI *WTInfoPtr)(UINT p_category, UINT p_index, LPVOID p_output); +typedef BOOL(WINAPI *WTPacketPtr)(HANDLE p_ctx, UINT p_param, LPVOID p_packets); +typedef BOOL(WINAPI *WTEnablePtr)(HANDLE p_ctx, BOOL p_enable); + +// Windows Ink API #ifndef POINTER_STRUCTURES #define POINTER_STRUCTURES @@ -75,6 +156,22 @@ typedef UINT32 POINTER_FLAGS; typedef UINT32 PEN_FLAGS; typedef UINT32 PEN_MASK; +#ifndef PEN_MASK_PRESSURE +#define PEN_MASK_PRESSURE 0x00000001 +#endif + +#ifndef PEN_MASK_TILT_X +#define PEN_MASK_TILT_X 0x00000004 +#endif + +#ifndef PEN_MASK_TILT_Y +#define PEN_MASK_TILT_Y 0x00000008 +#endif + +#ifndef POINTER_MESSAGE_FLAG_FIRSTBUTTON +#define POINTER_MESSAGE_FLAG_FIRSTBUTTON 0x00000010 +#endif + enum tagPOINTER_INPUT_TYPE { PT_POINTER = 0x00000001, PT_TOUCH = 0x00000002, @@ -128,6 +225,10 @@ typedef struct tagPOINTER_PEN_INFO { #endif //POINTER_STRUCTURES +#ifndef WM_POINTERUPDATE +#define WM_POINTERUPDATE 0x0245 +#endif + typedef BOOL(WINAPI *GetPointerTypePtr)(uint32_t p_id, POINTER_INPUT_TYPE *p_type); typedef BOOL(WINAPI *GetPointerPenInfoPtr)(uint32_t p_id, POINTER_PEN_INFO *p_pen_info); @@ -155,6 +256,15 @@ class DisplayServerWindows : public DisplayServer { _THREAD_SAFE_CLASS_ + // WinTab API + static bool wintab_available; + static WTOpenPtr wintab_WTOpen; + static WTClosePtr wintab_WTClose; + static WTInfoPtr wintab_WTInfo; + static WTPacketPtr wintab_WTPacket; + static WTEnablePtr wintab_WTEnable; + + // Windows Ink API static GetPointerTypePtr win8p_GetPointerType; static GetPointerPenInfoPtr win8p_GetPointerPenInfo; @@ -214,6 +324,16 @@ class DisplayServerWindows : public DisplayServer { bool no_focus = false; bool window_has_focus = false; + HANDLE wtctx; + LOGCONTEXTW wtlc; + int min_pressure; + int max_pressure; + bool tilt_supported; + + int last_pressure_update; + float last_pressure; + Vector2 last_tilt; + HBITMAP hBitmap; //DIB section for layered window uint8_t *dib_data = nullptr; Size2 dib_size; diff --git a/scene/2d/navigation_region_2d.cpp b/scene/2d/navigation_region_2d.cpp index 19484442b1..abbfbf83b7 100644 --- a/scene/2d/navigation_region_2d.cpp +++ b/scene/2d/navigation_region_2d.cpp @@ -118,7 +118,7 @@ Array NavigationPolygon::_get_polygons() const { return ret; } -void NavigationPolygon::_set_outlines(const TypedArray<Vector<int32_t>> &p_array) { +void NavigationPolygon::_set_outlines(const TypedArray<Vector<Vector2>> &p_array) { outlines.resize(p_array.size()); for (int i = 0; i < p_array.size(); i++) { diff --git a/scene/2d/navigation_region_2d.h b/scene/2d/navigation_region_2d.h index cbfe4299fb..e730df6373 100644 --- a/scene/2d/navigation_region_2d.h +++ b/scene/2d/navigation_region_2d.h @@ -58,7 +58,7 @@ protected: void _set_polygons(const TypedArray<Vector<int32_t>> &p_array); Array _get_polygons() const; - void _set_outlines(const TypedArray<Vector<int32_t>> &p_array); + void _set_outlines(const TypedArray<Vector<Vector2>> &p_array); Array _get_outlines() const; public: diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index ac8a77b6cb..1ea51be148 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -42,6 +42,7 @@ Dictionary Node2D::_edit_get_state() const { state["position"] = get_position(); state["rotation"] = get_rotation(); state["scale"] = get_scale(); + state["skew"] = get_skew(); return state; } @@ -51,11 +52,14 @@ void Node2D::_edit_set_state(const Dictionary &p_state) { pos = p_state["position"]; angle = p_state["rotation"]; _scale = p_state["scale"]; + skew = p_state["skew"]; _update_transform(); _change_notify("rotation"); _change_notify("rotation_degrees"); _change_notify("scale"); + _change_notify("skew"); + _change_notify("skew_degrees"); _change_notify("position"); } @@ -111,7 +115,7 @@ void Node2D::_edit_set_rect(const Rect2 &p_edit_rect) { Point2 new_pos = p_edit_rect.position + p_edit_rect.size * zero_offset; Transform2D postxf; - postxf.set_rotation_and_scale(angle, _scale); + postxf.set_rotation_scale_and_skew(angle, _scale, skew); new_pos = postxf.xform(new_pos); pos += new_pos; @@ -128,12 +132,13 @@ void Node2D::_update_xform_values() { pos = _mat.elements[2]; angle = _mat.get_rotation(); _scale = _mat.get_scale(); + skew = _mat.get_skew(); _xform_dirty = false; } void Node2D::_update_transform() { - _mat.set_rotation_and_scale(angle, _scale); + _mat.set_rotation_scale_and_skew(angle, _scale, skew); _mat.elements[2] = pos; RenderingServer::get_singleton()->canvas_item_set_transform(get_canvas_item(), _mat); @@ -163,11 +168,26 @@ void Node2D::set_rotation(float p_radians) { _change_notify("rotation_degrees"); } +void Node2D::set_skew(float p_radians) { + + if (_xform_dirty) + ((Node2D *)this)->_update_xform_values(); + skew = p_radians; + _update_transform(); + _change_notify("skew"); + _change_notify("skew_degrees"); +} + void Node2D::set_rotation_degrees(float p_degrees) { set_rotation(Math::deg2rad(p_degrees)); } +void Node2D::set_skew_degrees(float p_degrees) { + + set_skew(Math::deg2rad(p_degrees)); +} + void Node2D::set_scale(const Size2 &p_scale) { if (_xform_dirty) @@ -196,11 +216,22 @@ float Node2D::get_rotation() const { return angle; } +float Node2D::get_skew() const { + if (_xform_dirty) + ((Node2D *)this)->_update_xform_values(); + + return skew; +} + float Node2D::get_rotation_degrees() const { return Math::rad2deg(get_rotation()); } +float Node2D::get_skew_degrees() const { + + return Math::rad2deg(get_skew()); +} Size2 Node2D::get_scale() const { if (_xform_dirty) ((Node2D *)this)->_update_xform_values(); @@ -398,11 +429,15 @@ void Node2D::_bind_methods() { ClassDB::bind_method(D_METHOD("set_position", "position"), &Node2D::set_position); ClassDB::bind_method(D_METHOD("set_rotation", "radians"), &Node2D::set_rotation); ClassDB::bind_method(D_METHOD("set_rotation_degrees", "degrees"), &Node2D::set_rotation_degrees); + ClassDB::bind_method(D_METHOD("set_skew", "radians"), &Node2D::set_skew); + ClassDB::bind_method(D_METHOD("set_skew_degrees", "degrees"), &Node2D::set_skew_degrees); ClassDB::bind_method(D_METHOD("set_scale", "scale"), &Node2D::set_scale); ClassDB::bind_method(D_METHOD("get_position"), &Node2D::get_position); ClassDB::bind_method(D_METHOD("get_rotation"), &Node2D::get_rotation); ClassDB::bind_method(D_METHOD("get_rotation_degrees"), &Node2D::get_rotation_degrees); + ClassDB::bind_method(D_METHOD("get_skew"), &Node2D::get_skew); + ClassDB::bind_method(D_METHOD("get_skew_degrees"), &Node2D::get_skew_degrees); ClassDB::bind_method(D_METHOD("get_scale"), &Node2D::get_scale); ClassDB::bind_method(D_METHOD("rotate", "radians"), &Node2D::rotate); @@ -443,6 +478,8 @@ void Node2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_rotation", "get_rotation"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation_degrees", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater", PROPERTY_USAGE_EDITOR), "set_rotation_degrees", "get_rotation_degrees"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "skew", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_skew", "get_skew"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "skew_degrees", PROPERTY_HINT_RANGE, "-89.9,89.9,0.1", PROPERTY_USAGE_EDITOR), "set_skew_degrees", "get_skew_degrees"); ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform", PROPERTY_HINT_NONE, "", 0), "set_transform", "get_transform"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_position", PROPERTY_HINT_NONE, "", 0), "set_global_position", "get_global_position"); @@ -460,6 +497,7 @@ Node2D::Node2D() { angle = 0; _scale = Vector2(1, 1); + skew = 0; _xform_dirty = false; z_index = 0; z_relative = true; diff --git a/scene/2d/node_2d.h b/scene/2d/node_2d.h index abed05ed0c..0afec36254 100644 --- a/scene/2d/node_2d.h +++ b/scene/2d/node_2d.h @@ -40,6 +40,7 @@ class Node2D : public CanvasItem { Point2 pos; float angle; Size2 _scale; + float skew; int z_index; bool z_relative; @@ -75,6 +76,8 @@ public: void set_position(const Point2 &p_pos); void set_rotation(float p_radians); void set_rotation_degrees(float p_degrees); + void set_skew(float p_radians); + void set_skew_degrees(float p_radians); void set_scale(const Size2 &p_scale); void rotate(float p_radians); @@ -86,7 +89,9 @@ public: Point2 get_position() const; float get_rotation() const; + float get_skew() const; float get_rotation_degrees() const; + float get_skew_degrees() const; Size2 get_scale() const; Point2 get_global_position() const; diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 9628c01718..86e61fe878 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -940,13 +940,10 @@ void TileMap::update_bitmask_area(const Vector2 &p_pos) { void TileMap::update_bitmask_region(const Vector2 &p_start, const Vector2 &p_end) { if ((p_end.x < p_start.x || p_end.y < p_start.y) || (p_end.x == p_start.x && p_end.y == p_start.y)) { - int i; Array a = get_used_cells(); - for (i = 0; i < a.size(); i++) { - // update_bitmask_area() in order to update cells adjacent to the - // current cell, since ordering in array may not be reliable + for (int i = 0; i < a.size(); i++) { Vector2 vector = (Vector2)a[i]; - update_bitmask_area(Vector2(vector.x, vector.y)); + update_cell_bitmask(vector.x, vector.y); } return; } diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index 28a8b01437..f2395d35fb 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -385,8 +385,8 @@ void AudioStreamPlayer3D::_notification(int p_what) { linear_velocity = velocity_tracker->get_tracked_linear_velocity(); } - Ref<World3D> world = get_world(); - ERR_FAIL_COND(world.is_null()); + Ref<World3D> world_3d = get_world_3d(); + ERR_FAIL_COND(world_3d.is_null()); int new_output_count = 0; @@ -396,7 +396,7 @@ void AudioStreamPlayer3D::_notification(int p_what) { //check if any area is diverting sound into a bus - PhysicsDirectSpaceState3D *space_state = PhysicsServer3D::get_singleton()->space_get_direct_state(world->get_space()); + PhysicsDirectSpaceState3D *space_state = PhysicsServer3D::get_singleton()->space_get_direct_state(world_3d->get_space()); PhysicsDirectSpaceState3D::ShapeResult sr[MAX_INTERSECT_AREAS]; @@ -419,7 +419,7 @@ void AudioStreamPlayer3D::_notification(int p_what) { } List<Camera3D *> cameras; - world->get_camera_list(&cameras); + world_3d->get_camera_list(&cameras); for (List<Camera3D *>::Element *E = cameras.front(); E; E = E->next()) { diff --git a/scene/3d/camera_3d.cpp b/scene/3d/camera_3d.cpp index 706c49b43b..2fcb2715be 100644 --- a/scene/3d/camera_3d.cpp +++ b/scene/3d/camera_3d.cpp @@ -95,8 +95,8 @@ void Camera3D::_update_camera() { get_viewport()->_camera_transform_changed_notify(); - if (get_world().is_valid()) { - get_world()->_update_camera(this); + if (get_world_3d().is_valid()) { + get_world_3d()->_update_camera(this); } } @@ -144,12 +144,12 @@ void Camera3D::_notification(int p_what) { } break; case NOTIFICATION_BECAME_CURRENT: { if (viewport) { - viewport->find_world()->_register_camera(this); + viewport->find_world_3d()->_register_camera(this); } } break; case NOTIFICATION_LOST_CURRENT: { if (viewport) { - viewport->find_world()->_remove_camera(this); + viewport->find_world_3d()->_remove_camera(this); } } break; } @@ -743,7 +743,7 @@ void ClippedCamera3D::_notification(int p_what) { return; } - PhysicsDirectSpaceState3D *dspace = get_world()->get_direct_space_state(); + PhysicsDirectSpaceState3D *dspace = get_world_3d()->get_direct_space_state(); ERR_FAIL_COND(!dspace); // most likely physics set to threads Vector3 cam_fw = -get_global_transform().basis.get_axis(Vector3::AXIS_Z).normalized(); diff --git a/scene/3d/collision_object_3d.cpp b/scene/3d/collision_object_3d.cpp index e6cd7bfe7e..5d050e32b0 100644 --- a/scene/3d/collision_object_3d.cpp +++ b/scene/3d/collision_object_3d.cpp @@ -44,7 +44,7 @@ void CollisionObject3D::_notification(int p_what) { else PhysicsServer3D::get_singleton()->body_set_state(rid, PhysicsServer3D::BODY_STATE_TRANSFORM, get_global_transform()); - RID space = get_world()->get_space(); + RID space = get_world_3d()->get_space(); if (area) { PhysicsServer3D::get_singleton()->area_set_space(rid, space); } else diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp index 0b7407e049..913a3ea49f 100644 --- a/scene/3d/node_3d.cpp +++ b/scene/3d/node_3d.cpp @@ -507,12 +507,12 @@ bool Node3D::is_set_as_toplevel() const { return data.toplevel; } -Ref<World3D> Node3D::get_world() const { +Ref<World3D> Node3D::get_world_3d() const { ERR_FAIL_COND_V(!is_inside_world(), Ref<World3D>()); ERR_FAIL_COND_V(!data.viewport, Ref<World3D>()); - return data.viewport->find_world(); + return data.viewport->find_world_3d(); } void Node3D::_propagate_visibility_changed() { @@ -756,7 +756,7 @@ void Node3D::_bind_methods() { ClassDB::bind_method(D_METHOD("is_set_as_toplevel"), &Node3D::is_set_as_toplevel); ClassDB::bind_method(D_METHOD("set_disable_scale", "disable"), &Node3D::set_disable_scale); ClassDB::bind_method(D_METHOD("is_scale_disabled"), &Node3D::is_scale_disabled); - ClassDB::bind_method(D_METHOD("get_world"), &Node3D::get_world); + ClassDB::bind_method(D_METHOD("get_world_3d"), &Node3D::get_world_3d); ClassDB::bind_method(D_METHOD("force_update_transform"), &Node3D::force_update_transform); diff --git a/scene/3d/node_3d.h b/scene/3d/node_3d.h index f97a8a97dc..a4191eb2b3 100644 --- a/scene/3d/node_3d.h +++ b/scene/3d/node_3d.h @@ -124,7 +124,7 @@ public: Node3D *get_parent_spatial() const; - Ref<World3D> get_world() const; + Ref<World3D> get_world_3d() const; void set_translation(const Vector3 &p_translation); void set_rotation(const Vector3 &p_euler_rad); diff --git a/scene/3d/ray_cast_3d.cpp b/scene/3d/ray_cast_3d.cpp index a18da61656..304a5e1254 100644 --- a/scene/3d/ray_cast_3d.cpp +++ b/scene/3d/ray_cast_3d.cpp @@ -196,7 +196,7 @@ void RayCast3D::_notification(int p_what) { } void RayCast3D::_update_raycast_state() { - Ref<World3D> w3d = get_world(); + Ref<World3D> w3d = get_world_3d(); ERR_FAIL_COND(w3d.is_null()); PhysicsDirectSpaceState3D *dss = PhysicsServer3D::get_singleton()->space_get_direct_state(w3d->get_space()); diff --git a/scene/3d/soft_body_3d.cpp b/scene/3d/soft_body_3d.cpp index 6092818252..850ffab292 100644 --- a/scene/3d/soft_body_3d.cpp +++ b/scene/3d/soft_body_3d.cpp @@ -270,7 +270,7 @@ void SoftBody3D::_notification(int p_what) { add_change_receptor(this); } - RID space = get_world()->get_space(); + RID space = get_world_3d()->get_space(); PhysicsServer3D::get_singleton()->soft_body_set_space(physics_rid, space); prepare_physics_server(); } break; diff --git a/scene/3d/spring_arm_3d.cpp b/scene/3d/spring_arm_3d.cpp index 0ffde7aa8f..1410b730fd 100644 --- a/scene/3d/spring_arm_3d.cpp +++ b/scene/3d/spring_arm_3d.cpp @@ -147,7 +147,7 @@ void SpringArm3D::process_spring() { if (shape.is_null()) { motion = Vector3(cast_direction * (spring_length)); PhysicsDirectSpaceState3D::RayResult r; - bool intersected = get_world()->get_direct_space_state()->intersect_ray(get_global_transform().origin, get_global_transform().origin + motion, r, excluded_objects, mask); + bool intersected = get_world_3d()->get_direct_space_state()->intersect_ray(get_global_transform().origin, get_global_transform().origin + motion, r, excluded_objects, mask); if (intersected) { float dist = get_global_transform().origin.distance_to(r.position); dist -= margin; @@ -155,7 +155,7 @@ void SpringArm3D::process_spring() { } } else { motion = Vector3(cast_direction * spring_length); - get_world()->get_direct_space_state()->cast_motion(shape->get_rid(), get_global_transform(), motion, 0, motion_delta, motion_delta_unsafe, excluded_objects, mask); + get_world_3d()->get_direct_space_state()->cast_motion(shape->get_rid(), get_global_transform(), motion, 0, motion_delta, motion_delta_unsafe, excluded_objects, mask); } current_spring_length = spring_length * motion_delta; diff --git a/scene/3d/visibility_notifier_3d.cpp b/scene/3d/visibility_notifier_3d.cpp index 2f657fe7b1..2707a0a514 100644 --- a/scene/3d/visibility_notifier_3d.cpp +++ b/scene/3d/visibility_notifier_3d.cpp @@ -68,7 +68,7 @@ void VisibilityNotifier3D::set_aabb(const AABB &p_aabb) { aabb = p_aabb; if (is_inside_world()) { - get_world()->_update_notifier(this, get_global_transform().xform(aabb)); + get_world_3d()->_update_notifier(this, get_global_transform().xform(aabb)); } _change_notify("aabb"); @@ -85,15 +85,15 @@ void VisibilityNotifier3D::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_WORLD: { - get_world()->_register_notifier(this, get_global_transform().xform(aabb)); + get_world_3d()->_register_notifier(this, get_global_transform().xform(aabb)); } break; case NOTIFICATION_TRANSFORM_CHANGED: { - get_world()->_update_notifier(this, get_global_transform().xform(aabb)); + get_world_3d()->_update_notifier(this, get_global_transform().xform(aabb)); } break; case NOTIFICATION_EXIT_WORLD: { - get_world()->_remove_notifier(this); + get_world_3d()->_remove_notifier(this); } break; } } diff --git a/scene/3d/visual_instance_3d.cpp b/scene/3d/visual_instance_3d.cpp index 604bc53422..ce8672c1dd 100644 --- a/scene/3d/visual_instance_3d.cpp +++ b/scene/3d/visual_instance_3d.cpp @@ -60,8 +60,8 @@ void VisualInstance3D::_notification(int p_what) { if (skeleton) RenderingServer::get_singleton()->instance_attach_skeleton( instance, skeleton->get_skeleton() ); */ - ERR_FAIL_COND(get_world().is_null()); - RenderingServer::get_singleton()->instance_set_scenario(instance, get_world()->get_scenario()); + ERR_FAIL_COND(get_world_3d().is_null()); + RenderingServer::get_singleton()->instance_set_scenario(instance, get_world_3d()->get_scenario()); _update_visibility(); } break; diff --git a/scene/3d/world_environment.cpp b/scene/3d/world_environment.cpp index 8cf4554653..8dbb709ae4 100644 --- a/scene/3d/world_environment.cpp +++ b/scene/3d/world_environment.cpp @@ -36,50 +36,50 @@ void WorldEnvironment::_notification(int p_what) { if (p_what == Node3D::NOTIFICATION_ENTER_WORLD || p_what == Node3D::NOTIFICATION_ENTER_TREE) { if (environment.is_valid()) { - if (get_viewport()->find_world()->get_environment().is_valid()) { + if (get_viewport()->find_world_3d()->get_environment().is_valid()) { WARN_PRINT("World already has an environment (Another WorldEnvironment?), overriding."); } - get_viewport()->find_world()->set_environment(environment); - add_to_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id())); + get_viewport()->find_world_3d()->set_environment(environment); + add_to_group("_world_environment_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id())); } if (camera_effects.is_valid()) { - if (get_viewport()->find_world()->get_camera_effects().is_valid()) { + if (get_viewport()->find_world_3d()->get_camera_effects().is_valid()) { WARN_PRINT("World already has a camera effects (Another WorldEnvironment?), overriding."); } - get_viewport()->find_world()->set_camera_effects(camera_effects); - add_to_group("_world_camera_effects_" + itos(get_viewport()->find_world()->get_scenario().get_id())); + get_viewport()->find_world_3d()->set_camera_effects(camera_effects); + add_to_group("_world_camera_effects_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id())); } } else if (p_what == Node3D::NOTIFICATION_EXIT_WORLD || p_what == Node3D::NOTIFICATION_EXIT_TREE) { - if (environment.is_valid() && get_viewport()->find_world()->get_environment() == environment) { - get_viewport()->find_world()->set_environment(Ref<Environment>()); - remove_from_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id())); + if (environment.is_valid() && get_viewport()->find_world_3d()->get_environment() == environment) { + get_viewport()->find_world_3d()->set_environment(Ref<Environment>()); + remove_from_group("_world_environment_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id())); } - if (camera_effects.is_valid() && get_viewport()->find_world()->get_camera_effects() == camera_effects) { - get_viewport()->find_world()->set_camera_effects(Ref<CameraEffects>()); - remove_from_group("_world_camera_effects_" + itos(get_viewport()->find_world()->get_scenario().get_id())); + if (camera_effects.is_valid() && get_viewport()->find_world_3d()->get_camera_effects() == camera_effects) { + get_viewport()->find_world_3d()->set_camera_effects(Ref<CameraEffects>()); + remove_from_group("_world_camera_effects_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id())); } } } void WorldEnvironment::set_environment(const Ref<Environment> &p_environment) { - if (is_inside_tree() && environment.is_valid() && get_viewport()->find_world()->get_environment() == environment) { - get_viewport()->find_world()->set_environment(Ref<Environment>()); - remove_from_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id())); + if (is_inside_tree() && environment.is_valid() && get_viewport()->find_world_3d()->get_environment() == environment) { + get_viewport()->find_world_3d()->set_environment(Ref<Environment>()); + remove_from_group("_world_environment_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id())); //clean up } environment = p_environment; if (is_inside_tree() && environment.is_valid()) { - if (get_viewport()->find_world()->get_environment().is_valid()) { + if (get_viewport()->find_world_3d()->get_environment().is_valid()) { WARN_PRINT("World already has an environment (Another WorldEnvironment?), overriding."); } - get_viewport()->find_world()->set_environment(environment); - add_to_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id())); + get_viewport()->find_world_3d()->set_environment(environment); + add_to_group("_world_environment_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id())); } update_configuration_warning(); @@ -92,19 +92,19 @@ Ref<Environment> WorldEnvironment::get_environment() const { void WorldEnvironment::set_camera_effects(const Ref<CameraEffects> &p_camera_effects) { - if (is_inside_tree() && camera_effects.is_valid() && get_viewport()->find_world()->get_camera_effects() == camera_effects) { - get_viewport()->find_world()->set_camera_effects(Ref<CameraEffects>()); - remove_from_group("_world_camera_effects_" + itos(get_viewport()->find_world()->get_scenario().get_id())); + if (is_inside_tree() && camera_effects.is_valid() && get_viewport()->find_world_3d()->get_camera_effects() == camera_effects) { + get_viewport()->find_world_3d()->set_camera_effects(Ref<CameraEffects>()); + remove_from_group("_world_camera_effects_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id())); //clean up } camera_effects = p_camera_effects; if (is_inside_tree() && camera_effects.is_valid()) { - if (get_viewport()->find_world()->get_camera_effects().is_valid()) { + if (get_viewport()->find_world_3d()->get_camera_effects().is_valid()) { WARN_PRINT("World already has an camera_effects (Another WorldEnvironment?), overriding."); } - get_viewport()->find_world()->set_camera_effects(camera_effects); - add_to_group("_world_camera_effects_" + itos(get_viewport()->find_world()->get_scenario().get_id())); + get_viewport()->find_world_3d()->set_camera_effects(camera_effects); + add_to_group("_world_camera_effects_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id())); } update_configuration_warning(); @@ -125,7 +125,7 @@ String WorldEnvironment::get_configuration_warning() const { return String(); List<Node *> nodes; - get_tree()->get_nodes_in_group("_world_environment_" + itos(get_viewport()->find_world()->get_scenario().get_id()), &nodes); + get_tree()->get_nodes_in_group("_world_environment_" + itos(get_viewport()->find_world_3d()->get_scenario().get_id()), &nodes); if (nodes.size() > 1) { return TTR("Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."); diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 9ef6b9864a..8228cf67bd 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -950,13 +950,13 @@ void AnimationPlayer::_animation_process(float p_delta) { play(queued.front()->get()); String new_name = playback.assigned; queued.pop_front(); - if (end_notify || playback.seeked) + if (end_notify) emit_signal(SceneStringNames::get_singleton()->animation_changed, old, new_name); } else { //stop(); playing = false; _set_process(false); - if (end_notify || playback.seeked) + if (end_notify) emit_signal(SceneStringNames::get_singleton()->animation_finished, playback.assigned); } end_reached = false; diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index bc28c38e2c..d0c6cac8cf 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -126,14 +126,17 @@ bool Tween::_set(const StringName &p_name, const Variant &p_value) { String name = p_name; if (name == "playback/speed" || name == "speed") { // Backwards compatibility set_speed_scale(p_value); + return true; } else if (name == "playback/active") { set_active(p_value); + return true; } else if (name == "playback/repeat") { set_repeat(p_value); + return true; } - return true; + return false; } bool Tween::_get(const StringName &p_name, Variant &r_ret) const { @@ -142,14 +145,17 @@ bool Tween::_get(const StringName &p_name, Variant &r_ret) const { String name = p_name; if (name == "playback/speed") { // Backwards compatibility r_ret = speed_scale; + return true; } else if (name == "playback/active") { r_ret = is_active(); + return true; } else if (name == "playback/repeat") { r_ret = is_repeat(); + return true; } - return true; + return false; } void Tween::_get_property_list(List<PropertyInfo> *p_list) const { diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 9ee7456d26..25fc6d82c8 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -1153,7 +1153,7 @@ void TextEdit::_notification(int p_what) { highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, 0); if (select_identifiers_enabled && highlighted_word.length() != 0) { - if (_is_char(highlighted_word[0])) { + if (_is_char(highlighted_word[0]) || highlighted_word[0] == '.') { highlighted_word_col = _get_column_pos_of_word(highlighted_word, fullstr, SEARCH_MATCH_CASE | SEARCH_WHOLE_WORDS, 0); } } diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 22cd1c98ab..07cb8e3cd2 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -504,7 +504,7 @@ bool SceneTree::idle(float p_time) { String env_path = ProjectSettings::get_singleton()->get("rendering/environment/default_environment"); env_path = env_path.strip_edges(); //user may have added a space or two String cpath; - Ref<Environment> fallback = get_root()->get_world()->get_fallback_environment(); + Ref<Environment> fallback = get_root()->get_world_3d()->get_fallback_environment(); if (fallback.is_valid()) { cpath = fallback->get_path(); } @@ -519,7 +519,7 @@ bool SceneTree::idle(float p_time) { } else { fallback.unref(); } - get_root()->get_world()->set_fallback_environment(fallback); + get_root()->get_world_3d()->set_fallback_environment(fallback); } } @@ -1409,8 +1409,8 @@ SceneTree::SceneTree() { root = memnew(Window); root->set_name("root"); - if (!root->get_world().is_valid()) - root->set_world(Ref<World3D>(memnew(World3D))); + if (!root->get_world_3d().is_valid()) + root->set_world_3d(Ref<World3D>(memnew(World3D))); // Initialize network state multiplayer_poll = true; @@ -1447,7 +1447,7 @@ SceneTree::SceneTree() { if (env_path != String()) { Ref<Environment> env = ResourceLoader::load(env_path); if (env.is_valid()) { - root->get_world()->set_fallback_environment(env); + root->get_world_3d()->set_fallback_environment(env); } else { if (Engine::get_singleton()->is_editor_hint()) { //file was erased, clear the field. diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index b0718eed79..e9827d521b 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -215,7 +215,7 @@ void Viewport::update_worlds() { find_world_2d()->_update_viewport(this, xformed_rect); find_world_2d()->_update(); - find_world()->_update(get_tree()->get_frame()); + find_world_3d()->_update(get_tree()->get_frame()); } void Viewport::_collision_object_input_event(CollisionObject3D *p_object, Camera3D *p_camera, const Ref<InputEvent> &p_input_event, const Vector3 &p_pos, const Vector3 &p_normal, int p_shape) { @@ -422,22 +422,22 @@ void Viewport::_sub_window_remove(Window *p_window) { RenderingServer::get_singleton()->viewport_set_parent_viewport(p_window->viewport, p_window->parent ? p_window->parent->viewport : RID()); } -void Viewport::_own_world_changed() { - ERR_FAIL_COND(world.is_null()); - ERR_FAIL_COND(own_world.is_null()); +void Viewport::_own_world_3d_changed() { + ERR_FAIL_COND(world_3d.is_null()); + ERR_FAIL_COND(own_world_3d.is_null()); if (is_inside_tree()) { _propagate_exit_world(this); } - own_world = world->duplicate(); + own_world_3d = world_3d->duplicate(); if (is_inside_tree()) { _propagate_enter_world(this); } if (is_inside_tree()) { - RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world()->get_scenario()); + RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world_3d()->get_scenario()); } _update_listener(); @@ -459,7 +459,7 @@ void Viewport::_notification(int p_what) { } current_canvas = find_world_2d()->get_canvas(); - RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world()->get_scenario()); + RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world_3d()->get_scenario()); RenderingServer::get_singleton()->viewport_attach_canvas(viewport, current_canvas); _update_listener(); @@ -474,14 +474,14 @@ void Viewport::_notification(int p_what) { contact_2d_debug = RenderingServer::get_singleton()->canvas_item_create(); RenderingServer::get_singleton()->canvas_item_set_parent(contact_2d_debug, find_world_2d()->get_canvas()); //3D - PhysicsServer3D::get_singleton()->space_set_debug_contacts(find_world()->get_space(), get_tree()->get_collision_debug_contact_count()); + PhysicsServer3D::get_singleton()->space_set_debug_contacts(find_world_3d()->get_space(), get_tree()->get_collision_debug_contact_count()); contact_3d_debug_multimesh = RenderingServer::get_singleton()->multimesh_create(); RenderingServer::get_singleton()->multimesh_allocate(contact_3d_debug_multimesh, get_tree()->get_collision_debug_contact_count(), RS::MULTIMESH_TRANSFORM_3D, true); RenderingServer::get_singleton()->multimesh_set_visible_instances(contact_3d_debug_multimesh, 0); RenderingServer::get_singleton()->multimesh_set_mesh(contact_3d_debug_multimesh, get_tree()->get_debug_contact_mesh()->get_rid()); contact_3d_debug_instance = RenderingServer::get_singleton()->instance_create(); RenderingServer::get_singleton()->instance_set_base(contact_3d_debug_instance, contact_3d_debug_multimesh); - RenderingServer::get_singleton()->instance_set_scenario(contact_3d_debug_instance, find_world()->get_scenario()); + RenderingServer::get_singleton()->instance_set_scenario(contact_3d_debug_instance, find_world_3d()->get_scenario()); //RenderingServer::get_singleton()->instance_geometry_set_flag(contact_3d_debug_instance, RS::INSTANCE_FLAG_VISIBLE_IN_ALL_ROOMS, true); } @@ -576,8 +576,8 @@ void Viewport::_notification(int p_what) { if (get_tree()->is_debugging_collisions_hint() && contact_3d_debug_multimesh.is_valid()) { - Vector<Vector3> points = PhysicsServer3D::get_singleton()->space_get_contacts(find_world()->get_space()); - int point_count = PhysicsServer3D::get_singleton()->space_get_contact_count(find_world()->get_space()); + Vector<Vector3> points = PhysicsServer3D::get_singleton()->space_get_contacts(find_world_3d()->get_space()); + int point_count = PhysicsServer3D::get_singleton()->space_get_contact_count(find_world_3d()->get_space()); RS::get_singleton()->multimesh_set_visible_instances(contact_3d_debug_multimesh, point_count); } @@ -805,7 +805,7 @@ void Viewport::_notification(int p_what) { Vector3 from = camera->project_ray_origin(pos); Vector3 dir = camera->project_ray_normal(pos); - PhysicsDirectSpaceState3D *space = PhysicsServer3D::get_singleton()->space_get_direct_state(find_world()->get_space()); + PhysicsDirectSpaceState3D *space = PhysicsServer3D::get_singleton()->space_get_direct_state(find_world_3d()->get_space()); if (space) { bool col = space->intersect_ray(from, from + dir * 10000, result, Set<RID>(), 0xFFFFFFFF, true, true, true); @@ -1185,7 +1185,7 @@ void Viewport::set_world_2d(const Ref<World2D> &p_world_2d) { return; if (parent && parent->find_world_2d() == p_world_2d) { - WARN_PRINT("Unable to use parent world as world_2d"); + WARN_PRINT("Unable to use parent world_3d as world_2d"); return; } @@ -1197,7 +1197,7 @@ void Viewport::set_world_2d(const Ref<World2D> &p_world_2d) { if (p_world_2d.is_valid()) world_2d = p_world_2d; else { - WARN_PRINT("Invalid world"); + WARN_PRINT("Invalid world_3d"); world_2d = Ref<World2D>(memnew(World2D)); } @@ -1235,7 +1235,7 @@ void Viewport::_propagate_enter_world(Node *p_node) { Viewport *v = Object::cast_to<Viewport>(p_node); if (v) { - if (v->world.is_valid() || v->own_world.is_valid()) + if (v->world_3d.is_valid() || v->own_world_3d.is_valid()) return; } #ifndef _3D_DISABLED @@ -1275,7 +1275,7 @@ void Viewport::_propagate_exit_world(Node *p_node) { Viewport *v = Object::cast_to<Viewport>(p_node); if (v) { - if (v->world.is_valid() || v->own_world.is_valid()) + if (v->world_3d.is_valid() || v->own_world_3d.is_valid()) return; } #ifndef _3D_DISABLED @@ -1289,26 +1289,26 @@ void Viewport::_propagate_exit_world(Node *p_node) { } } -void Viewport::set_world(const Ref<World3D> &p_world) { +void Viewport::set_world_3d(const Ref<World3D> &p_world_3d) { - if (world == p_world) + if (world_3d == p_world_3d) return; if (is_inside_tree()) _propagate_exit_world(this); - if (own_world.is_valid() && world.is_valid()) { - world->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_changed)); + if (own_world_3d.is_valid() && world_3d.is_valid()) { + world_3d->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_3d_changed)); } - world = p_world; + world_3d = p_world_3d; - if (own_world.is_valid()) { - if (world.is_valid()) { - own_world = world->duplicate(); - world->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_changed)); + if (own_world_3d.is_valid()) { + if (world_3d.is_valid()) { + own_world_3d = world_3d->duplicate(); + world_3d->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_3d_changed)); } else { - own_world = Ref<World3D>(memnew(World3D)); + own_world_3d = Ref<World3D>(memnew(World3D)); } } @@ -1316,15 +1316,15 @@ void Viewport::set_world(const Ref<World3D> &p_world) { _propagate_enter_world(this); if (is_inside_tree()) { - RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world()->get_scenario()); + RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world_3d()->get_scenario()); } _update_listener(); } -Ref<World3D> Viewport::get_world() const { +Ref<World3D> Viewport::get_world_3d() const { - return world; + return world_3d; } Ref<World2D> Viewport::get_world_2d() const { @@ -1332,14 +1332,14 @@ Ref<World2D> Viewport::get_world_2d() const { return world_2d; } -Ref<World3D> Viewport::find_world() const { +Ref<World3D> Viewport::find_world_3d() const { - if (own_world.is_valid()) - return own_world; - else if (world.is_valid()) - return world; + if (own_world_3d.is_valid()) + return own_world_3d; + else if (world_3d.is_valid()) + return world_3d; else if (parent) - return parent->find_world(); + return parent->find_world_3d(); else return Ref<World3D>(); } @@ -3077,25 +3077,25 @@ void Viewport::unhandled_input(const Ref<InputEvent> &p_event, bool p_local_coor } } -void Viewport::set_use_own_world(bool p_world) { +void Viewport::set_use_own_world_3d(bool p_world_3d) { - if (p_world == own_world.is_valid()) + if (p_world_3d == own_world_3d.is_valid()) return; if (is_inside_tree()) _propagate_exit_world(this); - if (!p_world) { - own_world = Ref<World3D>(); - if (world.is_valid()) { - world->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_changed)); + if (!p_world_3d) { + own_world_3d = Ref<World3D>(); + if (world_3d.is_valid()) { + world_3d->disconnect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_3d_changed)); } } else { - if (world.is_valid()) { - own_world = world->duplicate(); - world->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_changed)); + if (world_3d.is_valid()) { + own_world_3d = world_3d->duplicate(); + world_3d->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &Viewport::_own_world_3d_changed)); } else { - own_world = Ref<World3D>(memnew(World3D)); + own_world_3d = Ref<World3D>(memnew(World3D)); } } @@ -3103,15 +3103,15 @@ void Viewport::set_use_own_world(bool p_world) { _propagate_enter_world(this); if (is_inside_tree()) { - RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world()->get_scenario()); + RenderingServer::get_singleton()->viewport_set_scenario(viewport, find_world_3d()->get_scenario()); } _update_listener(); } -bool Viewport::is_using_own_world() const { +bool Viewport::is_using_own_world_3d() const { - return own_world.is_valid(); + return own_world_3d.is_valid(); } void Viewport::set_physics_object_picking(bool p_enable) { @@ -3366,9 +3366,9 @@ void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_world_2d", "world_2d"), &Viewport::set_world_2d); ClassDB::bind_method(D_METHOD("get_world_2d"), &Viewport::get_world_2d); ClassDB::bind_method(D_METHOD("find_world_2d"), &Viewport::find_world_2d); - ClassDB::bind_method(D_METHOD("set_world", "world"), &Viewport::set_world); - ClassDB::bind_method(D_METHOD("get_world"), &Viewport::get_world); - ClassDB::bind_method(D_METHOD("find_world"), &Viewport::find_world); + ClassDB::bind_method(D_METHOD("set_world_3d", "world_3d"), &Viewport::set_world_3d); + ClassDB::bind_method(D_METHOD("get_world_3d"), &Viewport::get_world_3d); + ClassDB::bind_method(D_METHOD("find_world_3d"), &Viewport::find_world_3d); ClassDB::bind_method(D_METHOD("set_canvas_transform", "xform"), &Viewport::set_canvas_transform); ClassDB::bind_method(D_METHOD("get_canvas_transform"), &Viewport::get_canvas_transform); @@ -3404,8 +3404,8 @@ void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("update_worlds"), &Viewport::update_worlds); - ClassDB::bind_method(D_METHOD("set_use_own_world", "enable"), &Viewport::set_use_own_world); - ClassDB::bind_method(D_METHOD("is_using_own_world"), &Viewport::is_using_own_world); + ClassDB::bind_method(D_METHOD("set_use_own_world_3d", "enable"), &Viewport::set_use_own_world_3d); + ClassDB::bind_method(D_METHOD("is_using_own_world_3d"), &Viewport::is_using_own_world_3d); ClassDB::bind_method(D_METHOD("get_camera"), &Viewport::get_camera); @@ -3453,8 +3453,8 @@ void Viewport::_bind_methods() { ClassDB::bind_method(D_METHOD("set_default_canvas_item_texture_repeat", "mode"), &Viewport::set_default_canvas_item_texture_repeat); ClassDB::bind_method(D_METHOD("get_default_canvas_item_texture_repeat"), &Viewport::get_default_canvas_item_texture_repeat); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "own_world"), "set_use_own_world", "is_using_own_world"); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "world", PROPERTY_HINT_RESOURCE_TYPE, "World"), "set_world", "get_world"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "own_world_3d"), "set_use_own_world_3d", "is_using_own_world_3d"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "world_3d", PROPERTY_HINT_RESOURCE_TYPE, "World3D"), "set_world_3d", "get_world_3d"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "world_2d", PROPERTY_HINT_RESOURCE_TYPE, "World2D", 0), "set_world_2d", "get_world_2d"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "transparent_bg"), "set_transparent_background", "has_transparent_background"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "handle_input_locally"), "set_handle_input_locally", "is_handling_input_locally"); diff --git a/scene/main/viewport.h b/scene/main/viewport.h index 7e2df9fe42..7da57347fd 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -253,8 +253,8 @@ private: Map<ObjectID, uint64_t> physics_2d_mouseover; Ref<World2D> world_2d; - Ref<World3D> world; - Ref<World3D> own_world; + Ref<World3D> world_3d; + Ref<World3D> own_world_3d; Rect2i to_screen_rect; StringName input_group; @@ -430,7 +430,7 @@ private: void _gui_set_root_order_dirty(); - void _own_world_changed(); + void _own_world_3d_changed(); friend class Window; @@ -477,10 +477,10 @@ public: Rect2 get_visible_rect() const; RID get_viewport_rid() const; - void set_world(const Ref<World3D> &p_world); + void set_world_3d(const Ref<World3D> &p_world_3d); void set_world_2d(const Ref<World2D> &p_world_2d); - Ref<World3D> get_world() const; - Ref<World3D> find_world() const; + Ref<World3D> get_world_3d() const; + Ref<World3D> find_world_3d() const; Ref<World2D> get_world_2d() const; Ref<World2D> find_world_2d() const; @@ -519,8 +519,8 @@ public: Vector2 get_camera_coords(const Vector2 &p_viewport_coords) const; Vector2 get_camera_rect_size() const; - void set_use_own_world(bool p_world); - bool is_using_own_world() const; + void set_use_own_world_3d(bool p_world_3d); + bool is_using_own_world_3d() const; void input_text(const String &p_text); void input(const Ref<InputEvent> &p_event, bool p_local_coords = false); diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index 310a7ef4e4..3b245f908a 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -1630,9 +1630,11 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = { { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "light_vec", "vec3(LIGHT_VEC, 0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SCALAR, "light_height", "LIGHT_HEIGHT" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "light_color", "LIGHT_COLOR.rgb" }, - { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "light_alpha", "LIGHT_COLOR.a" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SCALAR, "light_alpha", "LIGHT_COLOR.a" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "light_uv", "vec3(LIGHT_UV, 0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "shadow_color", "SHADOW_COLOR.rgb" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SCALAR, "shadow_alpha", "SHADOW_COLOR.a" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "shadow_vec", "vec3(SHADOW_VEC, 0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "screen_uv", "vec3(SCREEN_UV, 0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "texture_pixel_size", "vec3(TEXTURE_PIXEL_SIZE, 1.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "point_coord", "vec3(POINT_COORD, 0.0)" }, @@ -2156,12 +2158,43 @@ String VisualShaderNodeUniform::get_uniform_name() const { return uniform_name; } +void VisualShaderNodeUniform::set_qualifier(VisualShaderNodeUniform::Qualifier p_qual) { + qualifier = p_qual; + emit_changed(); +} + +VisualShaderNodeUniform::Qualifier VisualShaderNodeUniform::get_qualifier() const { + return qualifier; +} + void VisualShaderNodeUniform::_bind_methods() { ClassDB::bind_method(D_METHOD("set_uniform_name", "name"), &VisualShaderNodeUniform::set_uniform_name); ClassDB::bind_method(D_METHOD("get_uniform_name"), &VisualShaderNodeUniform::get_uniform_name); + ClassDB::bind_method(D_METHOD("set_qualifier", "qualifier"), &VisualShaderNodeUniform::set_qualifier); + ClassDB::bind_method(D_METHOD("get_qualifier"), &VisualShaderNodeUniform::get_qualifier); + ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "uniform_name"), "set_uniform_name", "get_uniform_name"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "qualifier", PROPERTY_HINT_ENUM, "None,Global,Instance"), "set_qualifier", "get_qualifier"); + + BIND_ENUM_CONSTANT(QUAL_NONE); + BIND_ENUM_CONSTANT(QUAL_GLOBAL); + BIND_ENUM_CONSTANT(QUAL_INSTANCE); +} + +String VisualShaderNodeUniform::_get_qual_str() const { + if (is_qualifier_supported(qualifier)) { + switch (qualifier) { + case QUAL_NONE: + break; + case QUAL_GLOBAL: + return "global "; + case QUAL_INSTANCE: + return "instance "; + } + } + return String(); } String VisualShaderNodeUniform::get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const { @@ -2171,11 +2204,21 @@ String VisualShaderNodeUniform::get_warning(Shader::Mode p_mode, VisualShader::T if (keyword_list.find(uniform_name)) { return TTR("Uniform name cannot be equal to a shader keyword. Choose another name."); } + if (!is_qualifier_supported(qualifier)) { + return "This uniform type does not support that qualifier."; + } return String(); } +Vector<StringName> VisualShaderNodeUniform::get_editable_properties() const { + Vector<StringName> props; + props.push_back("qualifier"); + return props; +} + VisualShaderNodeUniform::VisualShaderNodeUniform() { + qualifier = QUAL_NONE; } ////////////// GroupBase diff --git a/scene/resources/visual_shader.h b/scene/resources/visual_shader.h index ecf3f93fbb..56f8e74d2b 100644 --- a/scene/resources/visual_shader.h +++ b/scene/resources/visual_shader.h @@ -369,21 +369,38 @@ public: class VisualShaderNodeUniform : public VisualShaderNode { GDCLASS(VisualShaderNodeUniform, VisualShaderNode); +public: + enum Qualifier { + QUAL_NONE, + QUAL_GLOBAL, + QUAL_INSTANCE, + }; + private: String uniform_name; + Qualifier qualifier; protected: static void _bind_methods(); + String _get_qual_str() const; public: void set_uniform_name(const String &p_name); String get_uniform_name() const; + void set_qualifier(Qualifier p_qual); + Qualifier get_qualifier() const; + + virtual bool is_qualifier_supported(Qualifier p_qual) const = 0; + + virtual Vector<StringName> get_editable_properties() const; virtual String get_warning(Shader::Mode p_mode, VisualShader::Type p_type) const; VisualShaderNodeUniform(); }; +VARIANT_ENUM_CAST(VisualShaderNodeUniform::Qualifier) + class VisualShaderNodeGroupBase : public VisualShaderNode { GDCLASS(VisualShaderNodeGroupBase, VisualShaderNode); diff --git a/scene/resources/visual_shader_nodes.cpp b/scene/resources/visual_shader_nodes.cpp index 2064ca10f3..7b9953a90f 100644 --- a/scene/resources/visual_shader_nodes.cpp +++ b/scene/resources/visual_shader_nodes.cpp @@ -3283,11 +3283,11 @@ String VisualShaderNodeFloatUniform::get_output_port_name(int p_port) const { String VisualShaderNodeFloatUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { if (hint == HINT_RANGE) { - return "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n"; + return _get_qual_str() + "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n"; } else if (hint == HINT_RANGE_STEP) { - return "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n"; + return _get_qual_str() + "uniform float " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n"; } - return "uniform float " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform float " + get_uniform_name() + ";\n"; } String VisualShaderNodeFloatUniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { @@ -3353,8 +3353,12 @@ void VisualShaderNodeFloatUniform::_bind_methods() { BIND_ENUM_CONSTANT(HINT_RANGE_STEP); } +bool VisualShaderNodeFloatUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + Vector<StringName> VisualShaderNodeFloatUniform::get_editable_properties() const { - Vector<StringName> props; + Vector<StringName> props = VisualShaderNodeUniform::get_editable_properties(); props.push_back("hint"); if (hint == HINT_RANGE || hint == HINT_RANGE_STEP) { props.push_back("min"); @@ -3405,11 +3409,11 @@ String VisualShaderNodeIntUniform::get_output_port_name(int p_port) const { String VisualShaderNodeIntUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { if (hint == HINT_RANGE) { - return "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n"; + return _get_qual_str() + "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ");\n"; } else if (hint == HINT_RANGE_STEP) { - return "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n"; + return _get_qual_str() + "uniform int " + get_uniform_name() + " : hint_range(" + rtos(hint_range_min) + ", " + rtos(hint_range_max) + ", " + rtos(hint_range_step) + ");\n"; } - return "uniform int " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform int " + get_uniform_name() + ";\n"; } String VisualShaderNodeIntUniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { @@ -3475,8 +3479,12 @@ void VisualShaderNodeIntUniform::_bind_methods() { BIND_ENUM_CONSTANT(HINT_RANGE_STEP); } +bool VisualShaderNodeIntUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + Vector<StringName> VisualShaderNodeIntUniform::get_editable_properties() const { - Vector<StringName> props; + Vector<StringName> props = VisualShaderNodeUniform::get_editable_properties(); props.push_back("hint"); if (hint == HINT_RANGE || hint == HINT_RANGE_STEP) { props.push_back("min"); @@ -3526,13 +3534,17 @@ String VisualShaderNodeBooleanUniform::get_output_port_name(int p_port) const { } String VisualShaderNodeBooleanUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - return "uniform bool " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform bool " + get_uniform_name() + ";\n"; } String VisualShaderNodeBooleanUniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n"; } +bool VisualShaderNodeBooleanUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + VisualShaderNodeBooleanUniform::VisualShaderNodeBooleanUniform() { } @@ -3568,7 +3580,7 @@ String VisualShaderNodeColorUniform::get_output_port_name(int p_port) const { String VisualShaderNodeColorUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - return "uniform vec4 " + get_uniform_name() + " : hint_color;\n"; + return _get_qual_str() + "uniform vec4 " + get_uniform_name() + " : hint_color;\n"; } String VisualShaderNodeColorUniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { @@ -3577,6 +3589,10 @@ String VisualShaderNodeColorUniform::generate_code(Shader::Mode p_mode, VisualSh return code; } +bool VisualShaderNodeColorUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + VisualShaderNodeColorUniform::VisualShaderNodeColorUniform() { } @@ -3611,13 +3627,17 @@ String VisualShaderNodeVec3Uniform::get_output_port_name(int p_port) const { } String VisualShaderNodeVec3Uniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - return "uniform vec3 " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform vec3 " + get_uniform_name() + ";\n"; } String VisualShaderNodeVec3Uniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n"; } +bool VisualShaderNodeVec3Uniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + VisualShaderNodeVec3Uniform::VisualShaderNodeVec3Uniform() { } @@ -3652,13 +3672,17 @@ String VisualShaderNodeTransformUniform::get_output_port_name(int p_port) const } String VisualShaderNodeTransformUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - return "uniform mat4 " + get_uniform_name() + ";\n"; + return _get_qual_str() + "uniform mat4 " + get_uniform_name() + ";\n"; } String VisualShaderNodeTransformUniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n"; } +bool VisualShaderNodeTransformUniform::is_qualifier_supported(Qualifier p_qual) const { + return true; // all qualifiers are supported +} + VisualShaderNodeTransformUniform::VisualShaderNodeTransformUniform() { } @@ -3713,7 +3737,7 @@ String VisualShaderNodeTextureUniform::get_output_port_name(int p_port) const { } String VisualShaderNodeTextureUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - String code = "uniform sampler2D " + get_uniform_name(); + String code = _get_qual_str() + "uniform sampler2D " + get_uniform_name(); switch (texture_type) { case TYPE_DATA: @@ -3778,7 +3802,7 @@ VisualShaderNodeTextureUniform::ColorDefault VisualShaderNodeTextureUniform::get } Vector<StringName> VisualShaderNodeTextureUniform::get_editable_properties() const { - Vector<StringName> props; + Vector<StringName> props = VisualShaderNodeUniform::get_editable_properties(); props.push_back("texture_type"); props.push_back("color_default"); return props; @@ -3810,6 +3834,18 @@ String VisualShaderNodeTextureUniform::get_input_port_default_hint(int p_port) c return ""; } +bool VisualShaderNodeTextureUniform::is_qualifier_supported(Qualifier p_qual) const { + switch (p_qual) { + case Qualifier::QUAL_NONE: + return true; + case Qualifier::QUAL_GLOBAL: + return true; + case Qualifier::QUAL_INSTANCE: + return false; + } + return false; +} + VisualShaderNodeTextureUniform::VisualShaderNodeTextureUniform() { texture_type = TYPE_DATA; color_default = COLOR_DEFAULT_WHITE; @@ -3952,7 +3988,7 @@ String VisualShaderNodeCubemapUniform::get_input_port_default_hint(int p_port) c } String VisualShaderNodeCubemapUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - String code = "uniform samplerCube " + get_uniform_name(); + String code = _get_qual_str() + "uniform samplerCube " + get_uniform_name(); switch (texture_type) { case TYPE_DATA: diff --git a/scene/resources/visual_shader_nodes.h b/scene/resources/visual_shader_nodes.h index 035e39230c..69f42f621a 100644 --- a/scene/resources/visual_shader_nodes.h +++ b/scene/resources/visual_shader_nodes.h @@ -1457,6 +1457,8 @@ public: void set_step(float p_value); float get_step() const; + bool is_qualifier_supported(Qualifier p_qual) const; + virtual Vector<StringName> get_editable_properties() const; VisualShaderNodeFloatUniform(); @@ -1509,6 +1511,8 @@ public: void set_step(int p_value); int get_step() const; + bool is_qualifier_supported(Qualifier p_qual) const; + virtual Vector<StringName> get_editable_properties() const; VisualShaderNodeIntUniform(); @@ -1535,6 +1539,8 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeBooleanUniform(); }; @@ -1557,6 +1563,8 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeColorUniform(); }; @@ -1579,6 +1587,8 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeVec3Uniform(); }; @@ -1601,6 +1611,8 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeTransformUniform(); }; @@ -1652,6 +1664,8 @@ public: void set_color_default(ColorDefault p_default); ColorDefault get_color_default() const; + bool is_qualifier_supported(Qualifier p_qual) const; + VisualShaderNodeTextureUniform(); }; diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp index 60217002fb..eb92cf55e3 100644 --- a/servers/register_server_types.cpp +++ b/servers/register_server_types.cpp @@ -218,6 +218,7 @@ void register_server_singletons() { Engine::get_singleton()->add_singleton(Engine::Singleton("DisplayServer", DisplayServer::get_singleton())); Engine::get_singleton()->add_singleton(Engine::Singleton("RenderingServer", RenderingServer::get_singleton())); + Engine::get_singleton()->add_singleton(Engine::Singleton("RenderingDevice", RenderingDevice::get_singleton())); Engine::get_singleton()->add_singleton(Engine::Singleton("AudioServer", AudioServer::get_singleton())); Engine::get_singleton()->add_singleton(Engine::Singleton("PhysicsServer2D", PhysicsServer2D::get_singleton())); Engine::get_singleton()->add_singleton(Engine::Singleton("PhysicsServer3D", PhysicsServer3D::get_singleton())); diff --git a/servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp b/servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp index b3cf40f166..6986f82065 100644 --- a/servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp +++ b/servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp @@ -1720,6 +1720,16 @@ void RasterizerSceneHighEndRD::_setup_lights(RID *p_light_cull_result, int p_lig light_data.shadow_enabled = p_using_shadows && storage->light_has_shadow(base); + float angular_diameter = storage->light_get_param(base, RS::LIGHT_PARAM_SIZE); + if (angular_diameter > 0.0) { + // I know tan(0) is 0, but let's not risk it with numerical precision. + // technically this will keep expanding until reaching the sun, but all we care + // is expand until we reach the radius of the near plane (there can't be more occluders than that) + angular_diameter = Math::tan(Math::deg2rad(angular_diameter)); + } else { + angular_diameter = 0.0; + } + if (light_data.shadow_enabled) { RS::LightDirectionalShadowMode smode = storage->light_directional_get_shadow_mode(base); @@ -1775,15 +1785,9 @@ void RasterizerSceneHighEndRD::_setup_lights(RID *p_light_cull_result, int p_lig light_data.fade_to = -light_data.shadow_split_offsets[3]; light_data.soft_shadow_scale = storage->light_get_param(base, RS::LIGHT_PARAM_SHADOW_BLUR); + light_data.softshadow_angle = angular_diameter; - float softshadow_angle = storage->light_get_param(base, RS::LIGHT_PARAM_SIZE); - if (softshadow_angle > 0.0) { - // I know tan(0) is 0, but let's not risk it with numerical precision. - // technically this will keep expanding until reaching the sun, but all we care - // is expand until we reach the radius of the near plane (there can't be more occluders than that) - light_data.softshadow_angle = Math::tan(Math::deg2rad(softshadow_angle)); - } else { - light_data.softshadow_angle = 0; + if (angular_diameter <= 0.0) { light_data.soft_shadow_scale *= directional_shadow_quality_radius_get(); // Only use quality radius for PCF } } @@ -1806,7 +1810,7 @@ void RasterizerSceneHighEndRD::_setup_lights(RID *p_light_cull_result, int p_lig sky_light_data.color[2] = light_data.color[2]; sky_light_data.enabled = true; - sky_light_data.size = light_data.softshadow_angle; + sky_light_data.size = angular_diameter; sky_scene_state.directional_light_count++; } diff --git a/thirdparty/README.md b/thirdparty/README.md index 5821ca1424..1a3588e0e0 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -422,6 +422,7 @@ Collection of single-file libraries used in Godot components. * Upstream: https://github.com/nothings/stb * Version: 1.19 * License: Public Domain (Unlicense) or MIT + * Modifications: `f->temp_offset += (sz+3)&~3;` changed to `f->temp_offset += (sz+7)&~7;` (needed until fixed upstream) ## nanosvg diff --git a/thirdparty/misc/stb_vorbis.c b/thirdparty/misc/stb_vorbis.c index b28944a4d9..b0d79b1724 100644 --- a/thirdparty/misc/stb_vorbis.c +++ b/thirdparty/misc/stb_vorbis.c @@ -961,7 +961,7 @@ static void *setup_temp_malloc(vorb *f, int sz) static void setup_temp_free(vorb *f, void *p, int sz) { if (f->alloc.alloc_buffer) { - f->temp_offset += (sz+3)&~3; + f->temp_offset += (sz+7)&~7; return; } free(p); |