diff options
110 files changed, 1745 insertions, 1177 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/debugger/remote_debugger.cpp b/core/debugger/remote_debugger.cpp index 95babc1784..97d5c71b6f 100644 --- a/core/debugger/remote_debugger.cpp +++ b/core/debugger/remote_debugger.cpp @@ -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/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/doc/classes/BaseMaterial3D.xml b/doc/classes/BaseMaterial3D.xml index 76abc31451..1da4e23437 100644 --- a/doc/classes/BaseMaterial3D.xml +++ b/doc/classes/BaseMaterial3D.xml @@ -159,6 +159,7 @@  		</member>  		<member name="detail_normal" type="Texture2D" setter="set_texture" getter="get_texture">  			Texture that specifies the per-pixel normal of the detail overlay. +			[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines.  		</member>  		<member name="detail_uv_layer" type="int" setter="set_detail_uv" getter="get_detail_uv" enum="BaseMaterial3D.DetailUV">  			Specifies whether to use [code]UV[/code] or [code]UV2[/code] for the detail layer. See [enum DetailUV] for options. @@ -250,6 +251,7 @@  		</member>  		<member name="normal_texture" type="Texture2D" setter="set_texture" getter="get_texture">  			Texture used to specify the normal at a given pixel. The [code]normal_texture[/code] only uses the red and green channels. The normal read from [code]normal_texture[/code] is oriented around the surface normal provided by the [Mesh]. +			[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines.  		</member>  		<member name="orm_texture" type="Texture2D" setter="set_texture" getter="get_texture">  		</member> diff --git a/doc/classes/CPUParticles2D.xml b/doc/classes/CPUParticles2D.xml index c2b821699d..df3ef71a2a 100644 --- a/doc/classes/CPUParticles2D.xml +++ b/doc/classes/CPUParticles2D.xml @@ -240,6 +240,7 @@  		</member>  		<member name="normalmap" type="Texture2D" setter="set_normalmap" getter="get_normalmap">  			Normal map to be used for the [member texture] property. +			[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines.  		</member>  		<member name="one_shot" type="bool" setter="set_one_shot" getter="get_one_shot" default="false">  			If [code]true[/code], only one emission cycle occurs. If set [code]true[/code] during a cycle, emission will stop at the cycle's end. diff --git a/doc/classes/GPUParticles2D.xml b/doc/classes/GPUParticles2D.xml index 64a2522f2f..ee67b5052c 100644 --- a/doc/classes/GPUParticles2D.xml +++ b/doc/classes/GPUParticles2D.xml @@ -53,6 +53,7 @@  		</member>  		<member name="normal_map" type="Texture2D" setter="set_normal_map" getter="get_normal_map">  			Normal map to be used for the [member texture] property. +			[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. See [url=http://wiki.polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for a comparison of normal map coordinates expected by popular engines.  		</member>  		<member name="one_shot" type="bool" setter="set_one_shot" getter="get_one_shot" default="false">  			If [code]true[/code], only one emission cycle occurs. If set [code]true[/code] during a cycle, emission will stop at the cycle's end. diff --git a/doc/classes/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/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大小必須大於0以渲染任何東西。"  #: scene/resources/visual_shader_nodes.cpp  #, fuzzy  msgid "Invalid source for preview." -msgstr "無效字型" +msgstr "預覽來自無效來源。"  #: scene/resources/visual_shader_nodes.cpp -#, fuzzy  msgid "Invalid source for shader." -msgstr "無效字型" +msgstr "無效的SHADER來源。"  #: scene/resources/visual_shader_nodes.cpp -#, fuzzy  msgid "Invalid comparison function for that type." -msgstr "無效字型" +msgstr "無效的函式類型對比。"  #: servers/visual/shader_language.cpp  msgid "Assignment to function." diff --git a/main/main.cpp b/main/main.cpp index dff7907e72..95449dd5cc 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -139,6 +139,7 @@ static DisplayServer::ScreenOrientation window_orientation = DisplayServer::SCRE  static uint32_t window_flags = 0;  static Size2i window_size = Size2i(1024, 600);  static bool window_vsync_via_compositor = false; +static bool disable_wintab = false;  static int init_screen = -1;  static bool init_fullscreen = false; @@ -314,6 +315,7 @@ void Main::print_help(const char *p_binary) {  	OS::get_singleton()->print("  --enable-vsync-via-compositor    When vsync is enabled, vsync via the OS' window compositor (Windows only).\n");  	OS::get_singleton()->print("  --disable-vsync-via-compositor   Disable vsync via the OS' window compositor (Windows only).\n");  	OS::get_singleton()->print("  --single-window                  Use a single window (no separate subwindows).\n"); +	OS::get_singleton()->print("  --disable-wintab                 Disable WinTab API and always use Windows Ink API for the pen input (Windows only).\n");  	OS::get_singleton()->print("\n");  #endif @@ -595,6 +597,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  		} else if (I->get() == "--gpu-abort") { // force windowed window  			Engine::singleton->abort_on_gpu_errors = true; +		} else if (I->get() == "--disable-wintab") { + +			disable_wintab = true;  		} else if (I->get() == "--single-window") { // force single window  			single_window = true; @@ -1079,6 +1084,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph  	OS::get_singleton()->_vsync_via_compositor = window_vsync_via_compositor; +	if (!disable_wintab) { +		// No "--disable_wintab" option +		disable_wintab = GLOBAL_DEF("display/window/disable_wintab_api", false); +	} + +	OS::get_singleton()->_disable_wintab = disable_wintab; +  	/* todo restore  	OS::get_singleton()->_allow_layered = GLOBAL_DEF("display/window/per_pixel_transparency/allowed", false);  	video_mode.layered = GLOBAL_DEF("display/window/per_pixel_transparency/enabled", false); diff --git a/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/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..3afe6c20ec 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,42 @@ LRESULT DisplayServerWindows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARA  			}  			delete[] lpb;  		} break; +		case WT_CSRCHANGE: +		case WT_PROXIMITY: { +			if (!OS::get_singleton()->is_wintab_disabled() && wintab_available && windows[window_id].wtctx) { +				AXIS pressure; +				if (wintab_WTInfo(WTI_DEVICES + windows[window_id].wtlc.lcDevice, DVC_NPRESSURE, &pressure)) { +					windows[window_id].min_pressure = int(pressure.axMin); +					windows[window_id].max_pressure = int(pressure.axMax); +				} +				AXIS orientation[3]; +				if (wintab_WTInfo(WTI_DEVICES + windows[window_id].wtlc.lcDevice, DVC_ORIENTATION, &orientation)) { +					windows[window_id].tilt_supported = orientation[0].axResolution && orientation[1].axResolution; +				} +				return 0; +			} +		} break; +		case WT_PACKET: { +			if (!OS::get_singleton()->is_wintab_disabled() && wintab_available && windows[window_id].wtctx) { +				PACKET packet; +				if (wintab_WTPacket(windows[window_id].wtctx, wParam, &packet)) { + +					float pressure = float(packet.pkNormalPressure - windows[window_id].min_pressure) / float(windows[window_id].max_pressure - windows[window_id].min_pressure); +					windows[window_id].last_pressure = pressure; +					windows[window_id].last_pressure_update = 0; + +					double azim = (packet.pkOrientation.orAzimuth / 10.0f) * (Math_PI / 180); +					double alt = Math::tan((Math::abs(packet.pkOrientation.orAltitude / 10.0f)) * (Math_PI / 180)); + +					if (windows[window_id].tilt_supported) { +						windows[window_id].last_tilt = Vector2(Math::atan(Math::sin(azim) / alt), Math::atan(Math::cos(azim) / alt)); +					} else { +						windows[window_id].last_tilt = Vector2(); +					} +				} +				return 0; +			} +		} break;  		case WM_POINTERUPDATE: {  			if (mouse_mode == MOUSE_MODE_CAPTURED && use_raw_input) {  				break; @@ -2145,7 +2186,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 +2823,39 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,  		DragAcceptFiles(wd.hWnd, true); +		if (!OS::get_singleton()->is_wintab_disabled() && wintab_available) { +			wintab_WTInfo(WTI_DEFSYSCTX, 0, &wd.wtlc); +			wd.wtlc.lcOptions |= CXO_MESSAGES; +			wd.wtlc.lcPktData = PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE | PK_ORIENTATION; +			wd.wtlc.lcMoveMask = PK_NORMAL_PRESSURE | PK_TANGENT_PRESSURE; +			wd.wtlc.lcPktMode = 0; +			wd.wtlc.lcOutOrgX = 0; +			wd.wtlc.lcOutExtX = wd.wtlc.lcInExtX; +			wd.wtlc.lcOutOrgY = 0; +			wd.wtlc.lcOutExtY = -wd.wtlc.lcInExtY; +			wd.wtctx = wintab_WTOpen(wd.hWnd, &wd.wtlc, false); +			if (wd.wtctx) { +				wintab_WTEnable(wd.wtctx, true); +				AXIS pressure; +				if (wintab_WTInfo(WTI_DEVICES + wd.wtlc.lcDevice, DVC_NPRESSURE, &pressure)) { +					wd.min_pressure = int(pressure.axMin); +					wd.max_pressure = int(pressure.axMax); +				} +				AXIS orientation[3]; +				if (wintab_WTInfo(WTI_DEVICES + wd.wtlc.lcDevice, DVC_ORIENTATION, &orientation)) { +					wd.tilt_supported = orientation[0].axResolution && orientation[1].axResolution; +				} +			} else { +				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 +2873,15 @@ DisplayServer::WindowID DisplayServerWindows::_create_window(WindowMode p_mode,  	return id;  } +// WinTab API +bool DisplayServerWindows::wintab_available = false; +WTOpenPtr DisplayServerWindows::wintab_WTOpen = nullptr; +WTClosePtr DisplayServerWindows::wintab_WTClose = nullptr; +WTInfoPtr DisplayServerWindows::wintab_WTInfo = nullptr; +WTPacketPtr DisplayServerWindows::wintab_WTPacket = nullptr; +WTEnablePtr DisplayServerWindows::wintab_WTEnable = nullptr; + +// Windows Ink API  GetPointerTypePtr DisplayServerWindows::win8p_GetPointerType = nullptr;  GetPointerPenInfoPtr DisplayServerWindows::win8p_GetPointerPenInfo = nullptr; @@ -2796,7 +2893,19 @@ typedef enum _SHC_PROCESS_DPI_AWARENESS {  DisplayServerWindows::DisplayServerWindows(const String &p_rendering_driver, WindowMode p_mode, uint32_t p_flags, const Vector2i &p_resolution, Error &r_error) { -	//Note: Functions for pen input, available on Windows 8+ +	//Note: Wacom WinTab driver API for pen input, for devices incompatible with Windows Ink. +	HMODULE wintab_lib = LoadLibraryW(L"wintab32.dll"); +	if (wintab_lib) { +		wintab_WTOpen = (WTOpenPtr)GetProcAddress(wintab_lib, "WTOpenW"); +		wintab_WTClose = (WTClosePtr)GetProcAddress(wintab_lib, "WTClose"); +		wintab_WTInfo = (WTInfoPtr)GetProcAddress(wintab_lib, "WTInfoW"); +		wintab_WTPacket = (WTPacketPtr)GetProcAddress(wintab_lib, "WTPacket"); +		wintab_WTEnable = (WTEnablePtr)GetProcAddress(wintab_lib, "WTEnable"); + +		wintab_available = wintab_WTOpen && wintab_WTClose && wintab_WTInfo && wintab_WTPacket && wintab_WTEnable; +	} + +	//Note: Windows Ink API for pen input, available on Windows 8+ only.  	HMODULE user32_lib = LoadLibraryW(L"user32.dll");  	if (user32_lib) {  		win8p_GetPointerType = (GetPointerTypePtr)GetProcAddress(user32_lib, "GetPointerType"); @@ -3013,7 +3122,10 @@ DisplayServerWindows::~DisplayServerWindows() {  			context_vulkan->window_destroy(MAIN_WINDOW_ID);  		}  #endif - +		if (wintab_available && windows[MAIN_WINDOW_ID].wtctx) { +			wintab_WTClose(windows[MAIN_WINDOW_ID].wtctx); +			windows[MAIN_WINDOW_ID].wtctx = 0; +		}  		DestroyWindow(windows[MAIN_WINDOW_ID].hWnd);  	}  } diff --git a/platform/windows/display_server_windows.h b/platform/windows/display_server_windows.h index 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/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/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/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/text_edit.cpp b/scene/gui/text_edit.cpp index 9ee7456d26..3c10e1027c 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);  						}  					} @@ -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/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/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]);  |