diff options
129 files changed, 1925 insertions, 1201 deletions
diff --git a/.clang-format b/.clang-format index eba6d586f0..b3f1954545 100644 --- a/.clang-format +++ b/.clang-format @@ -124,4 +124,5 @@ ObjCBlockIndentWidth: 4 ### Java specific config ### Language: Java # BreakAfterJavaFieldAnnotations: false +JavaImportGroups: ['org.godotengine', 'android', 'androidx', 'com.android', 'com.google', 'java', 'javax'] ... @@ -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/color.h b/core/color.h index d95e80f5da..8b689fdde1 100644 --- a/core/color.h +++ b/core/color.h @@ -205,7 +205,7 @@ struct Color { operator String() const; /** - * No construct parameters, r=0, g=0, b=0. a=255 + * No construct parameters, r=0, g=0, b=0. a=1 */ _FORCE_INLINE_ Color() { r = 0; @@ -223,6 +223,16 @@ struct Color { b = p_b; a = p_a; } + + /** + * Construct a Color from another Color, but with the specified alpha value. + */ + _FORCE_INLINE_ Color(const Color &p_c, float p_a) { + r = p_c.r; + g = p_c.g; + b = p_c.b; + a = p_a; + } }; bool Color::operator<(const Color &p_color) const { diff --git a/core/debugger/remote_debugger.cpp b/core/debugger/remote_debugger.cpp index fd109c62b6..97d5c71b6f 100644 --- a/core/debugger/remote_debugger.cpp +++ b/core/debugger/remote_debugger.cpp @@ -466,7 +466,7 @@ void RemoteDebugger::_print_handler(void *p_this, const String &p_string, bool p String s = p_string; int allowed_chars = MIN(MAX(rd->max_chars_per_second - rd->char_count, 0), s.length()); - if (allowed_chars == 0) + if (allowed_chars == 0 && s.length() > 0) return; if (allowed_chars < s.length()) { @@ -480,10 +480,16 @@ void RemoteDebugger::_print_handler(void *p_this, const String &p_string, bool p if (rd->is_peer_connected()) { if (overflowed) s += "[...]"; - rd->output_strings.push_back(s); + + OutputString output_string; + output_string.message = s; + output_string.type = p_error ? MESSAGE_TYPE_ERROR : MESSAGE_TYPE_LOG; + rd->output_strings.push_back(output_string); if (overflowed) { - rd->output_strings.push_back("[output overflow, print less text!]"); + output_string.message = "[output overflow, print less text!]"; + output_string.type = MESSAGE_TYPE_ERROR; + rd->output_strings.push_back(output_string); } } } @@ -517,15 +523,32 @@ void RemoteDebugger::flush_output() { if (output_strings.size()) { // Join output strings so we generate less messages. + Vector<String> joined_log_strings; Vector<String> strings; - strings.resize(output_strings.size()); - String *w = strings.ptrw(); + Vector<int> types; for (int i = 0; i < output_strings.size(); i++) { - w[i] = output_strings[i]; + const OutputString &output_string = output_strings[i]; + if (output_string.type == MESSAGE_TYPE_ERROR) { + if (!joined_log_strings.empty()) { + strings.push_back(String("\n").join(joined_log_strings)); + types.push_back(MESSAGE_TYPE_LOG); + joined_log_strings.clear(); + } + strings.push_back(output_string.message); + types.push_back(MESSAGE_TYPE_ERROR); + } else { + joined_log_strings.push_back(output_string.message); + } + } + + if (!joined_log_strings.empty()) { + strings.push_back(String("\n").join(joined_log_strings)); + types.push_back(MESSAGE_TYPE_LOG); } Array arr; arr.push_back(strings); + arr.push_back(types); _put_msg("output", arr); output_strings.clear(); } diff --git a/core/debugger/remote_debugger.h b/core/debugger/remote_debugger.h index f805eec631..cac0bc3730 100644 --- a/core/debugger/remote_debugger.h +++ b/core/debugger/remote_debugger.h @@ -40,6 +40,11 @@ #include "core/ustring.h" class RemoteDebugger : public EngineDebugger { +public: + enum MessageType { + MESSAGE_TYPE_LOG, + MESSAGE_TYPE_ERROR, + }; private: typedef DebuggerMarshalls::OutputError ErrorMessage; @@ -57,7 +62,11 @@ private: Ref<RemoteDebuggerPeer> peer; - List<String> output_strings; + struct OutputString { + String message; + MessageType type; + }; + List<OutputString> output_strings; List<ErrorMessage> errors; int n_messages_dropped = 0; diff --git a/core/input/godotcontrollerdb.txt b/core/input/godotcontrollerdb.txt index f6411e2429..adc3649d64 100644 --- a/core/input/godotcontrollerdb.txt +++ b/core/input/godotcontrollerdb.txt @@ -1,6 +1,9 @@ # Game Controller DB for Godot in SDL 2.0.10 format # Source: https://github.com/godotengine/godot +# Windows +__XINPUT_DEVICE__,XInput Gamepad,a:b12,b:b13,x:b14,y:b15,start:b4,back:b5,leftstick:b6,rightstick:b7,leftshoulder:b8,rightshoulder:b9,dpup:b0,dpdown:b1,dpleft:b2,dpright:b3,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Windows, + # Javascript Default HTML5 Gamepad, Default Mapping,leftx:a0,lefty:a1,dpdown:b13,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:b14,lefttrigger:a6,x:b2,dpup:b12,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:b15,righttrigger:a7,b:b1,platform:Javascript, c2a94d6963726f736f66742058626f78,Wireless X360 Controller,leftx:a0,lefty:a1,dpdown:b14,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:b11,lefttrigger:a2,x:b2,dpup:b13,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:b12,righttrigger:a5,b:b1,platform:Javascript, 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/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/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/variant.cpp b/core/variant.cpp index b3611536b8..a91876dd98 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -102,11 +102,6 @@ String Variant::get_type_name(Variant::Type p_type) { return "Plane"; } break; - /* - case QUAT: { - - - } break;*/ case AABB: { return "AABB"; diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 39bfd04a0b..9fffb42ff6 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -1075,6 +1075,11 @@ struct _VariantCall { r_ret = Color::hex(*p_args[0]); } + static void Color_init5(Variant &r_ret, const Variant **p_args) { + + r_ret = Color(((Color)(*p_args[0])), *p_args[1]); + } + static void AABB_init1(Variant &r_ret, const Variant **p_args) { r_ret = ::AABB(*p_args[0], *p_args[1]); @@ -1353,6 +1358,8 @@ Variant Variant::construct(const Variant::Type p_type, const Variant **p_args, i case RECT2I: return (Rect2i(*p_args[0])); case VECTOR3: return (Vector3(*p_args[0])); case VECTOR3I: return (Vector3i(*p_args[0])); + case TRANSFORM2D: + return (Transform2D(p_args[0]->operator Transform2D())); case PLANE: return (Plane(*p_args[0])); case QUAT: return (p_args[0]->operator Quat()); case AABB: @@ -2209,6 +2216,8 @@ void register_variant_methods() { _VariantCall::add_constructor(_VariantCall::Color_init1, Variant::COLOR, "r", Variant::FLOAT, "g", Variant::FLOAT, "b", Variant::FLOAT, "a", Variant::FLOAT); _VariantCall::add_constructor(_VariantCall::Color_init2, Variant::COLOR, "r", Variant::FLOAT, "g", Variant::FLOAT, "b", Variant::FLOAT); + // init3 and init4 are the constructors for HTML hex strings and integers respectively which don't need binding here, so we skip to init5. + _VariantCall::add_constructor(_VariantCall::Color_init5, Variant::COLOR, "c", Variant::COLOR, "a", Variant::FLOAT); _VariantCall::add_constructor(_VariantCall::AABB_init1, Variant::AABB, "position", Variant::VECTOR3, "size", Variant::VECTOR3); 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/Camera3D.xml b/doc/classes/Camera3D.xml index bfba23c7ee..6ff4875364 100644 --- a/doc/classes/Camera3D.xml +++ b/doc/classes/Camera3D.xml @@ -183,8 +183,13 @@ <member name="far" type="float" setter="set_zfar" getter="get_zfar" default="100.0"> The distance to the far culling boundary for this camera relative to its local Z axis. </member> - <member name="fov" type="float" setter="set_fov" getter="get_fov" default="70.0"> + <member name="fov" type="float" setter="set_fov" getter="get_fov" default="75.0"> The camera's field of view angle (in degrees). Only applicable in perspective mode. Since [member keep_aspect] locks one axis, [code]fov[/code] sets the other axis' field of view angle. + For reference, the default vertical field of view value ([code]75.0[/code]) is equivalent to an horizontal FOV of: + - ~91.31 degrees in a 4:3 viewport + - ~101.67 degrees in a 16:10 viewport + - ~107.51 degrees in a 16:9 viewport + - ~121.63 degrees in a 21:9 viewport </member> <member name="frustum_offset" type="Vector2" setter="set_frustum_offset" getter="get_frustum_offset" default="Vector2( 0, 0 )"> The camera's frustum offset. This can be changed from the default to create "tilted frustum" effects such as [url=https://zdoom.org/wiki/Y-shearing]Y-shearing[/url]. diff --git a/doc/classes/Color.xml b/doc/classes/Color.xml index 1af5c87532..b35d4fb36a 100644 --- a/doc/classes/Color.xml +++ b/doc/classes/Color.xml @@ -42,6 +42,20 @@ <method name="Color"> <return type="Color"> </return> + <argument index="0" name="c" type="Color"> + </argument> + <argument index="1" name="a" type="float"> + </argument> + <description> + Constructs a color from an existing color, but with a custom alpha value. + [codeblock] + var red = Color(Color.red, 0.5) # 50% transparent red. + [/codeblock] + </description> + </method> + <method name="Color"> + <return type="Color"> + </return> <argument index="0" name="r" type="float"> </argument> <argument index="1" name="g" type="float"> 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/KinematicBody3D.xml b/doc/classes/KinematicBody3D.xml index 5f9b36f97d..830d63ed11 100644 --- a/doc/classes/KinematicBody3D.xml +++ b/doc/classes/KinematicBody3D.xml @@ -108,7 +108,7 @@ This method should be used in [method Node._physics_process] (or in a method called by [method Node._physics_process]), as it uses the physics step's [code]delta[/code] value automatically in calculations. Otherwise, the simulation will run at an incorrect speed. [code]linear_velocity[/code] is the velocity vector (typically meters per second). Unlike in [method move_and_collide], you should [i]not[/i] multiply it by [code]delta[/code] — the physics engine handles applying the velocity. [code]up_direction[/code] is the up direction, used to determine what is a wall and what is a floor or a ceiling. If set to the default value of [code]Vector3(0, 0, 0)[/code], everything is considered a wall. - If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on slopes if you include gravity in [code]linear_velocity[/code]. + If [code]stop_on_slope[/code] is [code]true[/code], body will not slide on slopes when you include gravity in [code]linear_velocity[/code] and the body is standing still. If the body collides, it will change direction a maximum of [code]max_slides[/code] times before it stops. [code]floor_max_angle[/code] is the maximum angle (in radians) where a slope is still considered a floor (or a ceiling), rather than a wall. The default value equals 45 degrees. If [code]infinite_inertia[/code] is [code]true[/code], body will be able to push [RigidBody3D] nodes, but it won't also detect any collisions with them. If [code]false[/code], it will interact with [RigidBody3D] nodes like with [StaticBody3D]. 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/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..ded72e796b 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/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/TextEdit.xml b/doc/classes/TextEdit.xml index b7cf93d672..bb2d355bf6 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -354,6 +354,17 @@ If [code]true[/code], hides the line of the specified index. </description> </method> + <method name="set_line"> + <return type="void"> + </return> + <argument index="0" name="line" type="int"> + </argument> + <argument index="1" name="new_text" type="String"> + </argument> + <description> + Sets the text for a specific line. + </description> + </method> <method name="toggle_fold_line"> <return type="void"> </return> 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/VisualShaderNodeUniform.xml b/doc/classes/VisualShaderNodeUniform.xml index c4362f6f2a..1225d9c320 100644 --- a/doc/classes/VisualShaderNodeUniform.xml +++ b/doc/classes/VisualShaderNodeUniform.xml @@ -9,9 +9,17 @@ <methods> </methods> <members> + <member name="qualifier" type="int" setter="set_qualifier" getter="get_qualifier" enum="VisualShaderNodeUniform.Qualifier" default="0"> + </member> <member name="uniform_name" type="String" setter="set_uniform_name" getter="get_uniform_name" default=""""> </member> </members> <constants> + <constant name="QUAL_NONE" value="0" enum="Qualifier"> + </constant> + <constant name="QUAL_GLOBAL" value="1" enum="Qualifier"> + </constant> + <constant name="QUAL_INSTANCE" value="2" enum="Qualifier"> + </constant> </constants> </class> diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index 81a7d85b18..152989f90b 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -31,6 +31,7 @@ #include "script_editor_debugger.h" #include "core/debugger/debugger_marshalls.h" +#include "core/debugger/remote_debugger.h" #include "core/io/marshalls.h" #include "core/project_settings.h" #include "core/ustring.h" @@ -396,10 +397,33 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da inspector->add_stack_variable(p_data); } else if (p_msg == "output") { - ERR_FAIL_COND(p_data.size() < 1); + ERR_FAIL_COND(p_data.size() != 2); + ERR_FAIL_COND(p_data[0].get_type() != Variant::PACKED_STRING_ARRAY); - Vector<String> strings = p_data[0]; - EditorNode::get_log()->add_message(String("\n").join(strings)); + Vector<String> output_strings = p_data[0]; + + ERR_FAIL_COND(p_data[1].get_type() != Variant::PACKED_INT32_ARRAY); + Vector<int> output_types = p_data[1]; + + ERR_FAIL_COND(output_strings.size() != output_types.size()); + + for (int i = 0; i < output_strings.size(); i++) { + RemoteDebugger::MessageType type = (RemoteDebugger::MessageType)(int)(output_types[i]); + EditorLog::MessageType msg_type; + switch (type) { + case RemoteDebugger::MESSAGE_TYPE_LOG: { + msg_type = EditorLog::MSG_TYPE_STD; + } break; + case RemoteDebugger::MESSAGE_TYPE_ERROR: { + msg_type = EditorLog::MSG_TYPE_ERROR; + } break; + default: { + WARN_PRINT("Unhandled script debugger message type: " + itos(type)); + msg_type = EditorLog::MSG_TYPE_STD; + } break; + } + EditorNode::get_log()->add_message(output_strings[i], msg_type); + } } else if (p_msg == "performance:profile_frame") { Vector<float> p; p.resize(p_data.size()); 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_inspector.cpp b/editor/editor_inspector.cpp index 8fcd5bacb6..6adc640651 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -501,18 +501,20 @@ bool EditorPropertyRevert::can_property_revert(Object *p_object, const StringNam } } - if (p_object->call("property_can_revert", p_property).operator bool()) { - - has_revert = true; - } - - if (!has_revert && !p_object->get_script().is_null()) { - Ref<Script> scr = p_object->get_script(); - if (scr.is_valid()) { - Variant orig_value; - if (scr->get_property_default_value(p_property, orig_value)) { - if (orig_value != p_object->get(p_property)) { - has_revert = true; + // If the object implements property_can_revert, rely on that completely + // (i.e. don't then try to revert to default value - the property_get_revert implementation + // can do that if so desired) + if (p_object->has_method("property_can_revert")) { + has_revert = p_object->call("property_can_revert", p_property).operator bool(); + } else { + if (!has_revert && !p_object->get_script().is_null()) { + Ref<Script> scr = p_object->get_script(); + if (scr.is_valid()) { + Variant orig_value; + if (scr->get_property_default_value(p_property, orig_value)) { + if (orig_value != p_object->get(p_property)) { + has_revert = true; + } } } } diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 1506c574dd..2c70e16610 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -36,6 +36,9 @@ #include "editor_scale.h" String EditorSpinSlider::get_tooltip(const Point2 &p_pos) const { + if (grabber->is_visible()) { + return rtos(get_value()) + "\n\n" + TTR("Hold Ctrl to round to integers. Hold Shift for more precise changes."); + } return rtos(get_value()); } @@ -111,7 +114,21 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { } if (grabbing_spinner) { + // Don't make the user scroll all the way back to 'in range' if they went off the end. + if (pre_grab_value < get_min() && !is_lesser_allowed()) { + pre_grab_value = get_min(); + } + if (pre_grab_value > get_max() && !is_greater_allowed()) { + pre_grab_value = get_max(); + } + if (mm->get_control()) { + // If control was just pressed, don't make the value do a huge jump in magnitude. + if (grabbing_spinner_dist_cache != 0) { + pre_grab_value += grabbing_spinner_dist_cache * get_step(); + grabbing_spinner_dist_cache = 0; + } + set_value(Math::round(pre_grab_value + get_step() * grabbing_spinner_dist_cache * 10)); } else { set_value(pre_grab_value + get_step() * grabbing_spinner_dist_cache); diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index bdb3eb964c..457a0aaa36 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -51,7 +51,6 @@ #include "scene/gui/subviewport_container.h" #include "scene/resources/packed_scene.h" #include "scene/resources/surface_tool.h" -#include "servers/display_server.h" #define DISTANCE_DEFAULT 4 @@ -196,12 +195,20 @@ void ViewportRotationControl::_gui_input(Ref<InputEvent> p_event) { _update_focus(); } orbiting = false; + if (Input::get_singleton()->get_mouse_mode() == Input::MOUSE_MODE_CAPTURED) { + Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE); + Input::get_singleton()->warp_mouse_position(orbiting_mouse_start); + } } } const Ref<InputEventMouseMotion> mm = p_event; if (mm.is_valid()) { if (orbiting) { + if (Input::get_singleton()->get_mouse_mode() == Input::MOUSE_MODE_VISIBLE) { + Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED); + orbiting_mouse_start = mm->get_global_position(); + } viewport->_nav_orbit(mm, viewport->_get_warped_mouse_motion(mm)); focused_axis = -1; } else { @@ -2210,14 +2217,14 @@ void Node3DEditorViewport::set_freelook_active(bool active_now) { } // Hide mouse like in an FPS (warping doesn't work) - DisplayServer::get_singleton()->mouse_set_mode(DisplayServer::MOUSE_MODE_CAPTURED); + Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED); } else if (freelook_active && !active_now) { // Sync camera cursor to cursor to "cut" interpolation jumps due to changing referential cursor = camera_cursor; // Restore mouse - DisplayServer::get_singleton()->mouse_set_mode(DisplayServer::MOUSE_MODE_VISIBLE); + Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE); } freelook_active = active_now; diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h index 71da14ae1a..fdc0741651 100644 --- a/editor/plugins/node_3d_editor_plugin.h +++ b/editor/plugins/node_3d_editor_plugin.h @@ -158,6 +158,7 @@ class ViewportRotationControl : public Control { Node3DEditorViewport *viewport = nullptr; Vector<Color> axis_colors; Vector<int> axis_menu_options; + Vector2i orbiting_mouse_start; bool orbiting = false; int focused_axis = -2; 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/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大å°å¿…é ˆå¤§æ–¼ï¼ä»¥æ¸²æŸ“任何æ±è¥¿ã€‚" #: 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/misc/dist/linux/org.godotengine.Godot.desktop b/misc/dist/linux/org.godotengine.Godot.desktop index c8b99207f8..8b74234174 100644 --- a/misc/dist/linux/org.godotengine.Godot.desktop +++ b/misc/dist/linux/org.godotengine.Godot.desktop @@ -5,6 +5,7 @@ Comment=Multi-platform 2D and 3D game engine with a feature-rich editor Exec=godot %f Icon=godot Terminal=false +PrefersNonDefaultGPU=true Type=Application MimeType=application/x-godot-project; Categories=Development;IDE; 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_parser.cpp b/modules/gdscript/gdscript_parser.cpp index c20d517ff6..17077567c7 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -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/mono/glue/GodotSharp/GodotSharp/Core/Color.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs index facaf74606..6030b72a44 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs @@ -420,7 +420,7 @@ namespace Godot return txt; } - // Constructors + // Constructors public Color(float r, float g, float b, float a = 1.0f) { this.r = r; @@ -429,6 +429,14 @@ namespace Godot this.a = a; } + public Color(Color c, float a = 1.0f) + { + r = c.r; + g = c.g; + b = c.b; + this.a = a; + } + public Color(uint rgba) { a = (rgba & 0xFF) / 255.0f; diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.java b/platform/android/java/lib/src/org/godotengine/godot/Godot.java index bf0d1c6273..957f6223a9 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java @@ -30,6 +30,13 @@ package org.godotengine.godot; +import org.godotengine.godot.input.GodotEditText; +import org.godotengine.godot.plugin.GodotPlugin; +import org.godotengine.godot.plugin.GodotPluginRegistry; +import org.godotengine.godot.utils.GodotNetUtils; +import org.godotengine.godot.utils.PermissionsUtil; +import org.godotengine.godot.xr.XRMode; + import android.annotation.SuppressLint; import android.app.Activity; import android.app.ActivityManager; @@ -77,6 +84,7 @@ import android.widget.Button; import android.widget.FrameLayout; import android.widget.ProgressBar; import android.widget.TextView; + import com.google.android.vending.expansion.downloader.DownloadProgressInfo; import com.google.android.vending.expansion.downloader.DownloaderClientMarshaller; import com.google.android.vending.expansion.downloader.DownloaderServiceMarshaller; @@ -84,6 +92,7 @@ import com.google.android.vending.expansion.downloader.Helpers; import com.google.android.vending.expansion.downloader.IDownloaderClient; import com.google.android.vending.expansion.downloader.IDownloaderService; import com.google.android.vending.expansion.downloader.IStub; + import java.io.File; import java.io.FileInputStream; import java.io.InputStream; @@ -91,12 +100,6 @@ import java.security.MessageDigest; import java.util.LinkedList; import java.util.List; import java.util.Locale; -import org.godotengine.godot.input.GodotEditText; -import org.godotengine.godot.plugin.GodotPlugin; -import org.godotengine.godot.plugin.GodotPluginRegistry; -import org.godotengine.godot.utils.GodotNetUtils; -import org.godotengine.godot.utils.PermissionsUtil; -import org.godotengine.godot.xr.XRMode; public abstract class Godot extends FragmentActivity implements SensorEventListener, IDownloaderClient { diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java b/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java index 1fb242d0bc..fa95e82e7a 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java @@ -35,6 +35,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager.NameNotFoundException; import android.util.Log; + import com.google.android.vending.expansion.downloader.DownloaderClientMarshaller; /** diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderService.java b/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderService.java index 7e74e8a80d..434da95bc0 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderService.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderService.java @@ -33,6 +33,7 @@ package org.godotengine.godot; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; + import com.google.android.vending.expansion.downloader.impl.DownloaderService; /** diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java index 9be93243b8..5d8ac09643 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java @@ -29,13 +29,7 @@ /*************************************************************************/ package org.godotengine.godot; -import android.annotation.SuppressLint; -import android.graphics.PixelFormat; -import android.opengl.GLSurfaceView; -import android.view.GestureDetector; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.SurfaceView; + import org.godotengine.godot.input.GodotGestureHandler; import org.godotengine.godot.input.GodotInputHandler; import org.godotengine.godot.utils.GLUtils; @@ -47,6 +41,14 @@ import org.godotengine.godot.xr.regular.RegularConfigChooser; import org.godotengine.godot.xr.regular.RegularContextFactory; import org.godotengine.godot.xr.regular.RegularFallbackConfigChooser; +import android.annotation.SuppressLint; +import android.graphics.PixelFormat; +import android.opengl.GLSurfaceView; +import android.view.GestureDetector; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.SurfaceView; + /** * A simple GLSurfaceView sub-class that demonstrate how to perform * OpenGL ES 2.0 rendering into a GL Surface. Note the following important diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java index 016a3a8d18..2eb6f4e313 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java @@ -29,6 +29,9 @@ /*************************************************************************/ package org.godotengine.godot; + +import org.godotengine.godot.input.*; + import android.content.*; import android.content.Intent; import android.content.pm.ActivityInfo; @@ -39,11 +42,10 @@ import android.os.*; import android.util.DisplayMetrics; import android.util.Log; import android.util.SparseArray; + import java.io.IOException; import java.io.InputStream; import java.util.Locale; -import org.godotengine.godot.input.*; -//android.os.Build // Wrapper for native library diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java index 71fe822233..9383781150 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java @@ -33,6 +33,7 @@ package org.godotengine.godot; import android.app.Activity; import android.hardware.SensorEvent; import android.view.Surface; + import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java b/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java index 3e5bb4a4c9..39858e5fee 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java @@ -30,13 +30,15 @@ package org.godotengine.godot; +import org.godotengine.godot.plugin.GodotPlugin; +import org.godotengine.godot.plugin.GodotPluginRegistry; +import org.godotengine.godot.utils.GLUtils; + import android.content.Context; import android.opengl.GLSurfaceView; + import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; -import org.godotengine.godot.plugin.GodotPlugin; -import org.godotengine.godot.plugin.GodotPluginRegistry; -import org.godotengine.godot.utils.GLUtils; /** * Godot's renderer implementation. diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java b/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java index 30197d5729..3a36c512a2 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotVulkanRenderView.java @@ -30,15 +30,16 @@ package org.godotengine.godot; +import org.godotengine.godot.input.GodotGestureHandler; +import org.godotengine.godot.input.GodotInputHandler; +import org.godotengine.godot.vulkan.VkRenderer; +import org.godotengine.godot.vulkan.VkSurfaceView; + import android.annotation.SuppressLint; import android.view.GestureDetector; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.SurfaceView; -import org.godotengine.godot.input.GodotGestureHandler; -import org.godotengine.godot.input.GodotInputHandler; -import org.godotengine.godot.vulkan.VkRenderer; -import org.godotengine.godot.vulkan.VkSurfaceView; public class GodotVulkanRenderView extends VkSurfaceView implements GodotRenderView { diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java index 92bb118e44..547c093419 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java @@ -29,6 +29,9 @@ /*************************************************************************/ package org.godotengine.godot.input; + +import org.godotengine.godot.*; + import android.content.Context; import android.os.Handler; import android.os.Message; @@ -38,8 +41,8 @@ import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; + import java.lang.ref.WeakReference; -import org.godotengine.godot.*; public class GodotEditText extends EditText { // =========================================================== diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java index b1e0f66373..0ac82dbfe4 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java @@ -30,11 +30,12 @@ package org.godotengine.godot.input; +import org.godotengine.godot.GodotLib; +import org.godotengine.godot.GodotRenderView; + import android.util.Log; import android.view.GestureDetector; import android.view.MotionEvent; -import org.godotengine.godot.GodotLib; -import org.godotengine.godot.GodotRenderView; /** * Handles gesture input related events for the {@link GodotRenderView} view. diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java index 0e4fc65119..cea58f27e6 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java @@ -32,18 +32,20 @@ package org.godotengine.godot.input; import static org.godotengine.godot.utils.GLUtils.DEBUG; +import org.godotengine.godot.GodotLib; +import org.godotengine.godot.GodotRenderView; +import org.godotengine.godot.input.InputManagerCompat.InputDeviceListener; + import android.util.Log; import android.view.InputDevice; import android.view.InputDevice.MotionRange; import android.view.KeyEvent; import android.view.MotionEvent; + import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; -import org.godotengine.godot.GodotLib; -import org.godotengine.godot.GodotRenderView; -import org.godotengine.godot.input.InputManagerCompat.InputDeviceListener; /** * Handles input related events for the {@link GodotRenderView} view. diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java index e12ff266bf..9cd08de529 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java @@ -29,6 +29,9 @@ /*************************************************************************/ package org.godotengine.godot.input; + +import org.godotengine.godot.*; + import android.content.Context; import android.text.Editable; import android.text.TextWatcher; @@ -37,7 +40,6 @@ import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; -import org.godotengine.godot.*; public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListener { // =========================================================== diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/InputManagerV16.java b/platform/android/java/lib/src/org/godotengine/godot/input/InputManagerV16.java index e4bafa7ff9..3b88609cc9 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/InputManagerV16.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/InputManagerV16.java @@ -23,6 +23,7 @@ import android.os.Build; import android.os.Handler; import android.view.InputDevice; import android.view.MotionEvent; + import java.util.HashMap; import java.util.Map; diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/Joystick.java b/platform/android/java/lib/src/org/godotengine/godot/input/Joystick.java index 0c1bdb32aa..1f3fe1e527 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/input/Joystick.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/Joystick.java @@ -31,6 +31,7 @@ package org.godotengine.godot.input; import android.view.InputDevice.MotionRange; + import java.util.ArrayList; /** diff --git a/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPlugin.java b/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPlugin.java index a051164d15..a42bcb28ce 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPlugin.java +++ b/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPlugin.java @@ -30,6 +30,9 @@ package org.godotengine.godot.plugin; +import org.godotengine.godot.BuildConfig; +import org.godotengine.godot.Godot; + import android.app.Activity; import android.content.Intent; import android.support.annotation.NonNull; @@ -38,16 +41,16 @@ import android.text.TextUtils; import android.util.Log; import android.view.Surface; import android.view.View; + import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; + import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; -import org.godotengine.godot.BuildConfig; -import org.godotengine.godot.Godot; /** * Base class for the Godot Android plugins. diff --git a/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPluginRegistry.java b/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPluginRegistry.java index e13a9c15d8..7bc8f2c03f 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPluginRegistry.java +++ b/platform/android/java/lib/src/org/godotengine/godot/plugin/GodotPluginRegistry.java @@ -30,12 +30,15 @@ package org.godotengine.godot.plugin; +import org.godotengine.godot.Godot; + import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; + import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; @@ -43,7 +46,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import org.godotengine.godot.Godot; /** * Registry used to load and access the registered Godot Android plugins. diff --git a/platform/android/java/lib/src/org/godotengine/godot/plugin/SignalInfo.java b/platform/android/java/lib/src/org/godotengine/godot/plugin/SignalInfo.java index f907706889..b940d679f0 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/plugin/SignalInfo.java +++ b/platform/android/java/lib/src/org/godotengine/godot/plugin/SignalInfo.java @@ -32,6 +32,7 @@ package org.godotengine.godot.plugin; import android.support.annotation.NonNull; import android.text.TextUtils; + import java.util.Arrays; /** diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java index 9d29551f89..291847723c 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java @@ -31,6 +31,7 @@ package org.godotengine.godot.utils; import android.util.Log; + import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLDisplay; diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/GodotNetUtils.java b/platform/android/java/lib/src/org/godotengine/godot/utils/GodotNetUtils.java index 011d426c7e..bb1667afda 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/utils/GodotNetUtils.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/GodotNetUtils.java @@ -30,10 +30,11 @@ package org.godotengine.godot.utils; +import org.godotengine.godot.Godot; + import android.content.Context; import android.net.wifi.WifiManager; import android.util.Log; -import org.godotengine.godot.Godot; /** * This class handles Android-specific networking functions. 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..4000e63fbe 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 @@ -30,15 +30,18 @@ package org.godotengine.godot.utils; +import org.godotengine.godot.Godot; + import android.Manifest; import android.content.pm.PackageInfo; 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; /** * This class includes utility functions for Android permissions related operations. @@ -46,6 +49,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 +118,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 +158,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/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java index 9209d6ccf2..c66d75bb2d 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java @@ -32,6 +32,7 @@ package org.godotengine.godot.xr.ovr; import android.opengl.EGLExt; import android.opengl.GLSurfaceView; + import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLDisplay; diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java index 36f4416df2..16d4a998f2 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java @@ -32,6 +32,7 @@ package org.godotengine.godot.xr.ovr; import android.opengl.EGL14; import android.opengl.GLSurfaceView; + import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLContext; diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java index b2aa130f37..7ca0777f11 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java @@ -31,6 +31,7 @@ package org.godotengine.godot.xr.ovr; import android.opengl.GLSurfaceView; + import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLDisplay; diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java index 8409e37f8f..924d12f0bc 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java @@ -30,11 +30,13 @@ package org.godotengine.godot.xr.regular; +import org.godotengine.godot.utils.GLUtils; + import android.opengl.GLSurfaceView; + import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLDisplay; -import org.godotengine.godot.utils.GLUtils; /** * Used to select the egl config for pancake games. diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularContextFactory.java b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularContextFactory.java index 31cf696195..126f3ad5f5 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularContextFactory.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularContextFactory.java @@ -30,14 +30,16 @@ package org.godotengine.godot.xr.regular; +import org.godotengine.godot.GodotLib; +import org.godotengine.godot.utils.GLUtils; + import android.opengl.GLSurfaceView; import android.util.Log; + import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLContext; import javax.microedition.khronos.egl.EGLDisplay; -import org.godotengine.godot.GodotLib; -import org.godotengine.godot.utils.GLUtils; /** * Factory used to setup the opengl context for pancake games. diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java index 71fcf06020..64bc4ac1da 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java @@ -30,11 +30,13 @@ package org.godotengine.godot.xr.regular; +import org.godotengine.godot.utils.GLUtils; + import android.util.Log; + import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLDisplay; -import org.godotengine.godot.utils.GLUtils; /* Fallback if 32bit View is not supported*/ public class RegularFallbackConfigChooser extends RegularConfigChooser { diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ConsumeTask.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ConsumeTask.java index c15bc232ce..31c72fe7f8 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ConsumeTask.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ConsumeTask.java @@ -33,7 +33,9 @@ package org.godotengine.godot.plugin.payment; import android.content.Context; import android.os.AsyncTask; import android.os.RemoteException; + import com.android.vending.billing.IInAppBillingService; + import java.lang.ref.WeakReference; abstract public class ConsumeTask { diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/GodotPayment.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/GodotPayment.java index c7d0a5de65..08ade2a18d 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/GodotPayment.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/GodotPayment.java @@ -30,16 +30,19 @@ package org.godotengine.godot.plugin.payment; +import org.godotengine.godot.Dictionary; +import org.godotengine.godot.Godot; +import org.godotengine.godot.GodotLib; +import org.godotengine.godot.plugin.GodotPlugin; + import android.content.Intent; import android.support.annotation.NonNull; import android.util.Log; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.godotengine.godot.Dictionary; -import org.godotengine.godot.Godot; -import org.godotengine.godot.GodotLib; -import org.godotengine.godot.plugin.GodotPlugin; + import org.json.JSONException; import org.json.JSONObject; diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/HandlePurchaseTask.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/HandlePurchaseTask.java index fe5685288b..70a51fcb97 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/HandlePurchaseTask.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/HandlePurchaseTask.java @@ -32,6 +32,7 @@ package org.godotengine.godot.plugin.payment; import android.app.Activity; import android.content.Intent; + import org.json.JSONException; import org.json.JSONObject; diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/PaymentsManager.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/PaymentsManager.java index bded1f452f..0393c0b06e 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/PaymentsManager.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/PaymentsManager.java @@ -40,9 +40,12 @@ import android.os.IBinder; import android.os.RemoteException; import android.text.TextUtils; import android.util.Log; + import com.android.vending.billing.IInAppBillingService; + import java.util.ArrayList; import java.util.Arrays; + import org.json.JSONException; import org.json.JSONObject; diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/PurchaseTask.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/PurchaseTask.java index eecd1d2151..4894e4020f 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/PurchaseTask.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/PurchaseTask.java @@ -37,6 +37,7 @@ import android.content.IntentSender.SendIntentException; import android.os.Bundle; import android.os.RemoteException; import android.util.Log; + import com.android.vending.billing.IInAppBillingService; abstract public class PurchaseTask { diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ReleaseAllConsumablesTask.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ReleaseAllConsumablesTask.java index b7bd638feb..006688a450 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ReleaseAllConsumablesTask.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ReleaseAllConsumablesTask.java @@ -34,9 +34,12 @@ import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; + import com.android.vending.billing.IInAppBillingService; + import java.lang.ref.WeakReference; import java.util.ArrayList; + import org.json.JSONException; import org.json.JSONObject; diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ValidateTask.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ValidateTask.java index d42ded0c9b..4ee7b5a0f8 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ValidateTask.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/ValidateTask.java @@ -30,12 +30,15 @@ package org.godotengine.godot.plugin.payment; +import org.godotengine.godot.plugin.payment.utils.HttpRequester; +import org.godotengine.godot.plugin.payment.utils.RequestParams; + import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; + import java.lang.ref.WeakReference; -import org.godotengine.godot.plugin.payment.utils.HttpRequester; -import org.godotengine.godot.plugin.payment.utils.RequestParams; + import org.json.JSONException; import org.json.JSONObject; diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/CustomSSLSocketFactory.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/CustomSSLSocketFactory.java index 9571769cd3..55b87b49e5 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/CustomSSLSocketFactory.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/CustomSSLSocketFactory.java @@ -38,8 +38,10 @@ import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; + import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; + import org.apache.http.conn.ssl.SSLSocketFactory; /** diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/HttpRequester.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/HttpRequester.java index dcb983201e..acd17f10f2 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/HttpRequester.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/HttpRequester.java @@ -30,9 +30,12 @@ package org.godotengine.godot.plugin.payment.utils; +import org.godotengine.godot.utils.Crypt; + import android.content.Context; import android.content.SharedPreferences; import android.util.Log; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -40,6 +43,7 @@ import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.security.KeyStore; import java.util.Date; + import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.client.ClientProtocolException; @@ -61,7 +65,6 @@ import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; -import org.godotengine.godot.utils.Crypt; /** * diff --git a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/RequestParams.java b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/RequestParams.java index 4be8b37473..023fd87f68 100644 --- a/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/RequestParams.java +++ b/platform/android/java/plugins/godotpayment/src/main/java/org/godotengine/godot/plugin/payment/utils/RequestParams.java @@ -33,6 +33,7 @@ package org.godotengine.godot.plugin.payment.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; + import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index a31d8cccaa..701cf69207 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) { @@ -1928,6 +1932,7 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA mm->set_control(control_mem); 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); @@ -1978,6 +1983,97 @@ 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(); + } + + POINT coords; + GetCursorPos(&coords); + ScreenToClient(windows[window_id].hWnd, &coords); + + // Don't calculate relative mouse movement if we don't have focus in CAPTURED mode. + if (!windows[window_id].window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED) + break; + + Ref<InputEventMouseMotion> mm; + mm.instance(); + mm->set_window_id(window_id); + mm->set_control(GetKeyState(VK_CONTROL) != 0); + mm->set_shift(GetKeyState(VK_SHIFT) != 0); + mm->set_alt(alt_mem); + + 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(coords.x, coords.y)); + mm->set_global_position(Vector2(coords.x, coords.y)); + + if (mouse_mode == MOUSE_MODE_CAPTURED) { + Point2i c(windows[window_id].width / 2, windows[window_id].height / 2); + old_x = c.x; + old_y = c.y; + + if (mm->get_position() == c) { + center = c; + return 0; + } + + Point2i ncenter = mm->get_position(); + center = ncenter; + POINT pos = { (int)c.x, (int)c.y }; + ClientToScreen(windows[window_id].hWnd, &pos); + SetCursorPos(pos.x, pos.y); + } + + Input::get_singleton()->set_mouse_position(mm->get_position()); + mm->set_speed(Input::get_singleton()->get_last_mouse_speed()); + + if (old_invalid) { + old_x = mm->get_position().x; + old_y = mm->get_position().y; + old_invalid = false; + } + + mm->set_relative(Vector2(mm->get_position() - Vector2(old_x, old_y))); + old_x = mm->get_position().x; + old_y = mm->get_position().y; + if (windows[window_id].window_has_focus) + Input::get_singleton()->parse_input_event(mm); + } + return 0; + } + } break; case WM_POINTERUPDATE: { if (mouse_mode == MOUSE_MODE_CAPTURED && use_raw_input) { break; @@ -2145,7 +2241,21 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA mm->set_shift((wParam & MK_SHIFT) != 0); mm->set_alt(alt_mem); - mm->set_pressure((wParam & MK_LBUTTON) ? 1.0f : 0.0f); + 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); @@ -2768,6 +2878,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 { + print_verbose("WinTab context creation failed."); + } + } 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); @@ -2785,6 +2928,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; @@ -2796,7 +2948,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"); @@ -3013,7 +3177,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 f6880d1021..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 @@ -144,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); @@ -171,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; @@ -230,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/platform/windows/key_mapping_windows.cpp b/platform/windows/key_mapping_windows.cpp index da63e92622..92a2585745 100644 --- a/platform/windows/key_mapping_windows.cpp +++ b/platform/windows/key_mapping_windows.cpp @@ -130,7 +130,7 @@ static _WinTranslatePair _vk_to_keycode[] = { { KEY_MASK_META, VK_LWIN }, //(0x5B) { KEY_MASK_META, VK_RWIN }, //(0x5C) - //VK_APPS (0x5D) + { KEY_MENU, VK_APPS }, //(0x5D) { KEY_STANDBY, VK_SLEEP }, //(0x5F) { KEY_KP_0, VK_NUMPAD0 }, //(0x60) { KEY_KP_1, VK_NUMPAD1 }, //(0x61) diff --git a/scene/2d/touch_screen_button.cpp b/scene/2d/touch_screen_button.cpp index 85fd05ac15..590cc1e6c4 100644 --- a/scene/2d/touch_screen_button.cpp +++ b/scene/2d/touch_screen_button.cpp @@ -260,9 +260,10 @@ bool TouchScreenButton::_is_point_inside(const Point2 &p_point) { bool check_rect = true; if (shape.is_valid()) { - check_rect = false; - Transform2D xform = shape_centered ? Transform2D().translated(shape->get_rect().size * 0.5f) : Transform2D(); + + Vector2 size = texture.is_null() ? shape->get_rect().size : texture->get_size(); + Transform2D xform = shape_centered ? Transform2D().translated(size * 0.5f) : Transform2D(); touched = shape->collide(xform, unit_rect, Transform2D(0, coord + Vector2(0.5, 0.5))); } diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index f2395d35fb..5701d3cea2 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -710,6 +710,11 @@ float AudioStreamPlayer3D::get_pitch_scale() const { void AudioStreamPlayer3D::play(float p_from_pos) { + if (!is_playing()) { + // Reset the prev_output_count if the stream is stopped + prev_output_count = 0; + } + if (stream_playback.is_valid()) { active = true; setplay = p_from_pos; diff --git a/scene/3d/camera_3d.cpp b/scene/3d/camera_3d.cpp index 2fcb2715be..871f3119bc 100644 --- a/scene/3d/camera_3d.cpp +++ b/scene/3d/camera_3d.cpp @@ -689,7 +689,7 @@ Camera3D::Camera3D() { viewport = nullptr; force_change = false; mode = PROJECTION_PERSPECTIVE; - set_perspective(70.0, 0.05, 100.0); + set_perspective(75.0, 0.05, 100.0); keep_aspect = KEEP_HEIGHT; layers = 0xfffff; v_offset = 0; 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/control.cpp b/scene/gui/control.cpp index b4dc37c74f..b710ba4803 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -2896,7 +2896,7 @@ void Control::_bind_methods() { ADD_GROUP("Size Flags", "size_flags_"); ADD_PROPERTY(PropertyInfo(Variant::INT, "size_flags_horizontal", PROPERTY_HINT_FLAGS, "Fill,Expand,Shrink Center,Shrink End"), "set_h_size_flags", "get_h_size_flags"); ADD_PROPERTY(PropertyInfo(Variant::INT, "size_flags_vertical", PROPERTY_HINT_FLAGS, "Fill,Expand,Shrink Center,Shrink End"), "set_v_size_flags", "get_v_size_flags"); - ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "size_flags_stretch_ratio", PROPERTY_HINT_RANGE, "0,128,0.01"), "set_stretch_ratio", "get_stretch_ratio"); + ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "size_flags_stretch_ratio", PROPERTY_HINT_RANGE, "0,20,0.01,or_greater"), "set_stretch_ratio", "get_stretch_ratio"); ADD_GROUP("Theme", ""); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "theme", PROPERTY_HINT_RESOURCE_TYPE, "Theme"), "set_theme", "get_theme"); ADD_GROUP("", ""); diff --git a/scene/gui/link_button.cpp b/scene/gui/link_button.cpp index 3dffa06b49..098e8297ad 100644 --- a/scene/gui/link_button.cpp +++ b/scene/gui/link_button.cpp @@ -111,11 +111,11 @@ void LinkButton::_notification(int p_what) { draw_string(font, Vector2(0, font->get_ascent()), text, color); if (do_underline) { - int underline_spacing = get_theme_constant("underline_spacing"); + int underline_spacing = get_theme_constant("underline_spacing") + font->get_underline_position(); int width = font->get_string_size(text).width; int y = font->get_ascent() + underline_spacing; - draw_line(Vector2(0, y), Vector2(width, y), color); + draw_line(Vector2(0, y), Vector2(width, y), color, font->get_underline_thickness()); } } break; diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index a247863298..9c48801ec1 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -1079,6 +1079,11 @@ bool PopupMenu::is_item_shortcut_disabled(int p_idx) const { return items[p_idx].shortcut_is_disabled; } +int PopupMenu::get_current_index() const { + + return mouse_over; +} + int PopupMenu::get_item_count() const { return items.size(); @@ -1457,6 +1462,7 @@ void PopupMenu::_bind_methods() { ClassDB::bind_method(D_METHOD("get_item_tooltip", "idx"), &PopupMenu::get_item_tooltip); ClassDB::bind_method(D_METHOD("get_item_shortcut", "idx"), &PopupMenu::get_item_shortcut); + ClassDB::bind_method(D_METHOD("get_current_index"), &PopupMenu::get_current_index); ClassDB::bind_method(D_METHOD("get_item_count"), &PopupMenu::get_item_count); ClassDB::bind_method(D_METHOD("remove_item", "idx"), &PopupMenu::remove_item); diff --git a/scene/gui/popup_menu.h b/scene/gui/popup_menu.h index 2eef1f009d..d5c1015863 100644 --- a/scene/gui/popup_menu.h +++ b/scene/gui/popup_menu.h @@ -178,6 +178,7 @@ public: Ref<ShortCut> get_item_shortcut(int p_idx) const; int get_item_state(int p_idx) const; + int get_current_index() const; int get_item_count() const; bool activate_item_by_event(const Ref<InputEvent> &p_event, bool p_for_global_only = false); diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 5c293cdf3c..84097eb6a1 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -600,8 +600,8 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & if (underline) { Color uc = color; uc.a *= 0.5; - int uy = y + lh - line_descent + 2; - float underline_width = 1.0; + int uy = y + lh - line_descent + font->get_underline_position(); + float underline_width = font->get_underline_thickness(); #ifdef TOOLS_ENABLED underline_width *= EDSCALE; #endif @@ -610,7 +610,7 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & Color uc = color; uc.a *= 0.5; int uy = y + lh - (line_ascent + line_descent) / 2; - float strikethrough_width = 1.0; + float strikethrough_width = font->get_underline_thickness(); #ifdef TOOLS_ENABLED strikethrough_width *= EDSCALE; #endif diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 9ee7456d26..aa518fbb7d 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); } } @@ -1487,12 +1487,12 @@ void TextEdit::_notification(int p_what) { int yofs = ofs_y + (get_row_height() - cache.font->get_height()) / 2; int w = drawer.draw_char(ci, Point2i(char_ofs + char_margin + ofs_x, yofs + ascent), str[j], str[j + 1], in_selection && override_selected_font_color ? cache.font_color_selected : color); if (underlined) { - float line_width = 1.0; + float line_width = cache.font->get_underline_thickness(); #ifdef TOOLS_ENABLED line_width *= EDSCALE; #endif - draw_rect(Rect2(char_ofs + char_margin + ofs_x, yofs + ascent + 2, w, line_width), in_selection && override_selected_font_color ? cache.font_color_selected : color); + draw_rect(Rect2(char_ofs + char_margin + ofs_x, yofs + ascent + cache.font->get_underline_position(), w, line_width), in_selection && override_selected_font_color ? cache.font_color_selected : color); } } else if (draw_tabs && str[j] == '\t') { int yofs = (get_row_height() - cache.tab_icon->get_height()) / 2; @@ -7083,6 +7083,7 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("get_line_count"), &TextEdit::get_line_count); ClassDB::bind_method(D_METHOD("get_text"), &TextEdit::get_text); ClassDB::bind_method(D_METHOD("get_line", "line"), &TextEdit::get_line); + ClassDB::bind_method(D_METHOD("set_line", "line", "new_text"), &TextEdit::set_line); ClassDB::bind_method(D_METHOD("center_viewport_to_cursor"), &TextEdit::center_viewport_to_cursor); ClassDB::bind_method(D_METHOD("cursor_set_column", "column", "adjust_viewport"), &TextEdit::cursor_set_column, DEFVAL(true)); diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index aad36ebf02..329c1085df 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -779,6 +779,9 @@ void TreeItem::_bind_methods() { ClassDB::bind_method(D_METHOD("set_text", "column", "text"), &TreeItem::set_text); ClassDB::bind_method(D_METHOD("get_text", "column"), &TreeItem::get_text); + ClassDB::bind_method(D_METHOD("set_suffix", "column", "text"), &TreeItem::set_suffix); + ClassDB::bind_method(D_METHOD("get_suffix", "column"), &TreeItem::get_suffix); + ClassDB::bind_method(D_METHOD("set_icon", "column", "texture"), &TreeItem::set_icon); ClassDB::bind_method(D_METHOD("get_icon", "column"), &TreeItem::get_icon); diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index eea4d12d0e..442151de36 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -221,6 +221,8 @@ Error DynamicFontAtSize::_load() { ascent = (face->size->metrics.ascender / 64.0) / oversampling * scale_color_font; descent = (-face->size->metrics.descender / 64.0) / oversampling * scale_color_font; + underline_position = -face->underline_position / 64.0 / oversampling * scale_color_font; + underline_thickness = face->underline_thickness / 64.0 / oversampling * scale_color_font; linegap = 0; valid = true; @@ -243,6 +245,16 @@ float DynamicFontAtSize::get_descent() const { return descent; } +float DynamicFontAtSize::get_underline_position() const { + + return underline_position; +} + +float DynamicFontAtSize::get_underline_thickness() const { + + return underline_thickness; +} + const Pair<const DynamicFontAtSize::Character *, DynamicFontAtSize *> DynamicFontAtSize::_find_char_with_font(CharType p_char, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks) const { const Character *chr = char_map.getptr(p_char); ERR_FAIL_COND_V(!chr, (Pair<const Character *, DynamicFontAtSize *>(nullptr, nullptr))); @@ -821,6 +833,22 @@ float DynamicFont::get_descent() const { return data_at_size->get_descent() + spacing_bottom; } +float DynamicFont::get_underline_position() const { + + if (!data_at_size.is_valid()) + return 2; + + return data_at_size->get_underline_position(); +} + +float DynamicFont::get_underline_thickness() const { + + if (!data_at_size.is_valid()) + return 1; + + return data_at_size->get_underline_thickness(); +} + Size2 DynamicFont::get_char_size(CharType p_char, CharType p_next) const { if (!data_at_size.is_valid()) diff --git a/scene/resources/dynamic_font.h b/scene/resources/dynamic_font.h index ef4b9dd9d0..2fa1951d27 100644 --- a/scene/resources/dynamic_font.h +++ b/scene/resources/dynamic_font.h @@ -124,6 +124,8 @@ class DynamicFontAtSize : public Reference { float rect_margin; float oversampling; float scale_color_font; + float underline_position; + float underline_thickness; bool valid; @@ -187,6 +189,8 @@ public: float get_ascent() const; float get_descent() const; + float get_underline_position() const; + float get_underline_thickness() const; Size2 get_char_size(CharType p_char, CharType p_next, const Vector<Ref<DynamicFontAtSize>> &p_fallbacks) const; @@ -274,6 +278,8 @@ public: virtual float get_ascent() const; virtual float get_descent() const; + virtual float get_underline_position() const; + virtual float get_underline_thickness() const; virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const; diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index 267816f267..51c2ff389a 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -356,6 +356,16 @@ float BitmapFont::get_descent() const { return height - ascent; } +float BitmapFont::get_underline_position() const { + + return 2; +} + +float BitmapFont::get_underline_thickness() const { + + return 1; +} + void BitmapFont::add_texture(const Ref<Texture2D> &p_texture) { ERR_FAIL_COND_MSG(p_texture.is_null(), "It's not a reference to a valid Texture object."); diff --git a/scene/resources/font.h b/scene/resources/font.h index c233344529..54b1eaa1b9 100644 --- a/scene/resources/font.h +++ b/scene/resources/font.h @@ -47,6 +47,8 @@ public: virtual float get_ascent() const = 0; virtual float get_descent() const = 0; + virtual float get_underline_position() const = 0; + virtual float get_underline_thickness() const = 0; virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const = 0; Size2 get_string_size(const String &p_string) const; @@ -167,6 +169,8 @@ public: void set_ascent(float p_ascent); float get_ascent() const; float get_descent() const; + float get_underline_position() const; + float get_underline_thickness() const; void add_texture(const Ref<Texture2D> &p_texture); void add_char(CharType p_char, int p_texture_idx, const Rect2 &p_rect, const Size2 &p_align, float p_advance = -1); 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/rendering/rendering_server_scene.h b/servers/rendering/rendering_server_scene.h index db2fbd6707..eb66cea3aa 100644 --- a/servers/rendering/rendering_server_scene.h +++ b/servers/rendering/rendering_server_scene.h @@ -82,7 +82,7 @@ public: Camera() { visible_layers = 0xFFFFFFFF; - fov = 70; + fov = 75; type = PERSPECTIVE; znear = 0.05; zfar = 100; diff --git a/thirdparty/jpeg-compressor/jpgd.cpp b/thirdparty/jpeg-compressor/jpgd.cpp index 257d0b7574..baf6ea0484 100644 --- a/thirdparty/jpeg-compressor/jpgd.cpp +++ b/thirdparty/jpeg-compressor/jpgd.cpp @@ -37,16 +37,14 @@ #ifndef JPGD_USE_SSE2 - #if defined(__GNUC__) - - #if (defined(__x86_64__) || defined(_M_X64)) - #if defined(__SSE2__) - #define JPGD_USE_SSE2 (1) - #endif + #if defined(__GNUC__) + #if defined(__SSE2__) + #define JPGD_USE_SSE2 (1) + #endif + #elif defined(_MSC_VER) + #if defined(_M_X64) + #define JPGD_USE_SSE2 (1) #endif - - #else - #define JPGD_USE_SSE2 (1) #endif #endif diff --git a/thirdparty/jpeg-compressor/patches/fix-msvc-sse2-detection.patch b/thirdparty/jpeg-compressor/patches/fix-msvc-sse2-detection.patch new file mode 100644 index 0000000000..830b03b0c0 --- /dev/null +++ b/thirdparty/jpeg-compressor/patches/fix-msvc-sse2-detection.patch @@ -0,0 +1,44 @@ +From ae74fa2fcdef8ec44b925a649f66e8cbefce8315 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= <rverschelde@gmail.com> +Date: Thu, 7 May 2020 12:14:09 +0200 +Subject: [PATCH] Fix detection of SSE2 with Visual Studio + +The previous code assumed that SSE2 is available when building with +Visual Studio, but that's not accurate on ARM with UWP. + +SSE2 could also be enabled on x86 if `_M_IX86_FP == 2`, but it requires +checking first that it's not actually set to 2 for AVX, AVX2 or AVX512 +(see https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2019), +so I left it out for this quick fix. +--- + jpgd.cpp | 16 +++++++--------- + 1 file changed, 7 insertions(+), 9 deletions(-) + +diff --git a/jpgd.cpp b/jpgd.cpp +index 91e66ad..db1f3b4 100644 +--- a/jpgd.cpp ++++ b/jpgd.cpp +@@ -37,16 +37,14 @@ + + #ifndef JPGD_USE_SSE2 + +- #if defined(__GNUC__) +- +- #if (defined(__x86_64__) || defined(_M_X64)) +- #if defined(__SSE2__) +- #define JPGD_USE_SSE2 (1) +- #endif ++ #if defined(__GNUC__) ++ #if defined(__SSE2__) ++ #define JPGD_USE_SSE2 (1) ++ #endif ++ #elif defined(_MSC_VER) ++ #if defined(_M_X64) ++ #define JPGD_USE_SSE2 (1) + #endif +- +- #else +- #define JPGD_USE_SSE2 (1) + #endif + + #endif diff --git a/thirdparty/vhacd/0005-fix-scale-calculation.patch b/thirdparty/vhacd/0005-fix-scale-calculation.patch new file mode 100644 index 0000000000..4b05f64fbf --- /dev/null +++ b/thirdparty/vhacd/0005-fix-scale-calculation.patch @@ -0,0 +1,20 @@ +diff --git a/thirdparty/vhacd/inc/vhacdVolume.h b/thirdparty/vhacd/inc/vhacdVolume.h +index 8c47fa1e2c..c445f20122 100644 +--- a/thirdparty/vhacd/inc/vhacdVolume.h ++++ b/thirdparty/vhacd/inc/vhacdVolume.h +@@ -316,13 +316,13 @@ void Volume::Voxelize(const T* const points, const uint32_t stridePoints, const + + double d[3] = { m_maxBB[0] - m_minBB[0], m_maxBB[1] - m_minBB[1], m_maxBB[2] - m_minBB[2] }; + double r; +- if (d[0] > d[1] && d[0] > d[2]) { ++ if (d[0] >= d[1] && d[0] >= d[2]) { + r = d[0]; + m_dim[0] = dim; + m_dim[1] = 2 + static_cast<size_t>(dim * d[1] / d[0]); + m_dim[2] = 2 + static_cast<size_t>(dim * d[2] / d[0]); + } +- else if (d[1] > d[0] && d[1] > d[2]) { ++ else if (d[1] >= d[0] && d[1] >= d[2]) { + r = d[1]; + m_dim[1] = dim; + m_dim[0] = 2 + static_cast<size_t>(dim * d[0] / d[1]); diff --git a/thirdparty/vhacd/inc/vhacdVolume.h b/thirdparty/vhacd/inc/vhacdVolume.h index 8c47fa1e2c..c445f20122 100644 --- a/thirdparty/vhacd/inc/vhacdVolume.h +++ b/thirdparty/vhacd/inc/vhacdVolume.h @@ -316,13 +316,13 @@ void Volume::Voxelize(const T* const points, const uint32_t stridePoints, const double d[3] = { m_maxBB[0] - m_minBB[0], m_maxBB[1] - m_minBB[1], m_maxBB[2] - m_minBB[2] }; double r; - if (d[0] > d[1] && d[0] > d[2]) { + if (d[0] >= d[1] && d[0] >= d[2]) { r = d[0]; m_dim[0] = dim; m_dim[1] = 2 + static_cast<size_t>(dim * d[1] / d[0]); m_dim[2] = 2 + static_cast<size_t>(dim * d[2] / d[0]); } - else if (d[1] > d[0] && d[1] > d[2]) { + else if (d[1] >= d[0] && d[1] >= d[2]) { r = d[1]; m_dim[1] = dim; m_dim[0] = 2 + static_cast<size_t>(dim * d[0] / d[1]); |