diff options
152 files changed, 3587 insertions, 3566 deletions
@@ -88,6 +88,7 @@ Pieter-Jan Briers <pieterjan.briers+git@gmail.com> Pieter-Jan Briers <pieterjan.briers+git@gmail.com> <pieterjan.briers@gmail.com> Poommetee Ketson <poommetee@protonmail.com> PrzemysÅ‚aw GoÅ‚Ä…b (n-pigeon) <golab.przemyslaw@gmail.com> +RafaÅ‚ Mikrut <mikrutrafal54@gmail.com> Ralf Hölzemer <r.hoelzemer@posteo.de> <rollenrolm@posteo.de> Ralf Hölzemer <r.hoelzemer@posteo.de> <rollenrolm@users.noreply.github.com> Ramesh Ravone <ramesh.maran443@gmail.com> @@ -112,4 +113,5 @@ Wilhem Barbier <nounoursheureux@openmailbox.org> <wilhem.b@free.fr> Wilhem Barbier <nounoursheureux@openmailbox.org> <schtroumps31@gmail.com> Will Nations <willnationsdev@gmail.com> yg2f <yoann@terminajones.com> +Zak Stam <zakscomputers@hotmail.com> Zher Huei Lee <lee.zh.92@gmail.com> diff --git a/AUTHORS.md b/AUTHORS.md index e9d095aae3..4dfb97641a 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -29,6 +29,7 @@ name is available. Aaron Franke (aaronfranke) Alexander Holland (AlexHolly) + Alexey Khoroshavin (allkhor) Alket Rexhepi (alketii) Andrea Catania (AndreaCatania) Andreas Haas (Hinsbart) @@ -61,6 +62,7 @@ name is available. DualMatrix Emmanuel Barroga (codecustard) Emmanuel Leblond (touilleMan) + Eoin O'Neill (Eoin-ONeill-Yokai) Eric Lasota (elasota) Erik Selecký (rxlecky) est31 @@ -76,6 +78,7 @@ name is available. Gordon MacPherson (RevoluPowered) Guilherme Felipe de C. G. da Silva (guilhermefelipecgs) Hanif Bin Ariffin (hbina) + Haoyu Qiu (timothyqiu) Hein-Pieter van Braam-Stewart (hpvb) Hiroshi Ogawa (hi-ogawa) homer666 @@ -101,6 +104,7 @@ name is available. Leon Krause (eska014) Lucien Menassol (Kanabenki) m4nu3lf + Marcel Admiraal (madmiraal) Marcelo Fernandez (marcelofg55) Marc Gilleron (Zylann) Marcin Zawiejski (dragmz) @@ -164,5 +168,6 @@ name is available. Xavier Cho (mysticfall) yg2f (SuperUserNameMan) Yuri Roubinsky (Chaosus) + Zak Stam (zaksnet) Zher Huei Lee (leezh) ZuBsPaCe diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index f86b8563ef..213eafdeb5 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -115,12 +115,6 @@ Comment: Open Asset Import Library (assimp) Copyright: 2006-2016, assimp team License: BSD-3-clause -Files: ./thirdparty/b2d_convexdecomp/ -Comment: Box2D (ConvexDecomp) -Copyright: 2007, Eric Jordan - 2006-2009, Erin Catto -License: Zlib - Files: ./thirdparty/bullet/ Comment: Bullet Continuous Collision Detection and Physics Library Copyright: 2003-2013, Erwin Coumans @@ -12,27 +12,23 @@ generous deed immortalized in the next stable release of Godot Engine. ## Platinum sponsors - Enjin Coin <https://enjincoin.io> Heroic Labs <https://heroiclabs.com> Interblock <http://interblockgaming.com> ## Gold sponsors Gamblify <https://www.gamblify.com> - Image Campus <https://www.imagecampus.edu.ar> Moonwards <https://www.moonwards.com> ## Mini sponsors AD Ford Alan Beauchamp - Anandarup Mallik + Anand Mallik Andrew Dunai Brandon Lamb Christopher Montesano - Christoph Woinke Darkhan Baimyrza - Denis Malyavin Edward Flick Gamechuck GameDev.net @@ -54,7 +50,6 @@ generous deed immortalized in the next stable release of Godot Engine. Mike King Nathan Warden Neal Gompa (Conan Kudo) - ScottMakesGames Slobodan Milnovic Stephan Lanfermann Steve @@ -64,7 +59,6 @@ generous deed immortalized in the next stable release of Godot Engine. ## Gold donors Andrei - cheese65536 Dave David Gehrig David Snopek @@ -73,7 +67,6 @@ generous deed immortalized in the next stable release of Godot Engine. Florian Rämisch GiulianoB Jakub Grzesik - K9Kraken Manuele Finocchiaro Officine Pixel S.n.c. Retro Village @@ -95,7 +88,6 @@ generous deed immortalized in the next stable release of Godot Engine. Default Name Florian Breisch Gamejunkey - Gero Javier Roman Jay Horton Joel Höglund @@ -107,22 +99,22 @@ generous deed immortalized in the next stable release of Godot Engine. Luke Maciej Pendolski Matthew Hillier + Mohamed Ikbel Boulabiar Mored1984 - Paul LaMotte Péter Magyar Rob Messick Ryan Badour Scott Wadden Sergey Shawn Yu - The Architect thechris Tom Langwaldt tukon Unseen Domains + William Wold Alex Khayrullin - Branwyn Tylwyth + Branwyn “Bee†Tylwyth Chris Goddard Chris Serino Christian Padilla @@ -144,6 +136,7 @@ generous deed immortalized in the next stable release of Godot Engine. Robert Willes Ronnie Ashlock Thomas Bjarnelöf + Valryia Vincent Henderson Wojciech Chojnacki Xavier PATRICELLI @@ -153,7 +146,6 @@ generous deed immortalized in the next stable release of Godot Engine. Alexey Dyadchenko Andreas Funke André Frélicot - andres eduardo lopez Andrew Bowen aoshiwik Ben Botwin @@ -178,17 +170,16 @@ generous deed immortalized in the next stable release of Godot Engine. Hysteria Idzard Kwadijk Jared White + Jeff Nyte Jeremy Sims Jerry Ling Joe Flood Jose Malheiro Joshua Lesperance - Juan T Chen Juan Velandia Juraj Móza Kasper Jeppesen kinfox - Maarten Elings Marcelo Dornbusch Lopes Markus Fehr Markus Wiesner @@ -220,6 +211,7 @@ generous deed immortalized in the next stable release of Godot Engine. Tobias Bocanegra Urho Zie Weaver + è•æƒŸå… ## Silver donors @@ -232,6 +224,7 @@ generous deed immortalized in the next stable release of Godot Engine. Adam Nakonieczny Adam N Webber Adam Smeltzer + Adam SzymaÅ„ski Adisibio Adrian Demetrescu Agustinus Arya @@ -240,7 +233,6 @@ generous deed immortalized in the next stable release of Godot Engine. Albin Jonasson Svärdsby Alder Stefano Alessandro Senese - Alexandre Alex Davies-Moore Allen Schade Andreas Evers @@ -252,11 +244,11 @@ generous deed immortalized in the next stable release of Godot Engine. Angelos Arnaoutis Anthony Bongiovanni Anthony Staunton - Anton Kurkin AP Condomines Arda Erol Arseniy M Arthur S. Muszynski + Asger Atilla Kiran Aubrey Falconer Avencherus @@ -281,6 +273,7 @@ generous deed immortalized in the next stable release of Godot Engine. Christian Winter Christoffer Sundbom Christopher Schmitt + Christoph Woinke Clay Heaton Collin Shooltz Daniel Johnson @@ -291,6 +284,7 @@ generous deed immortalized in the next stable release of Godot Engine. David May David Rapisarda David Woodard + Dennis Idzikowsky Dominic Cooney Dominik Wetzel Donn Eddy @@ -304,23 +298,22 @@ generous deed immortalized in the next stable release of Godot Engine. Ellen Marie Dash Elmeri '- Duy Kevin Nguyen Emanuel Kotzayan - Ennemoser Ernst Eric Ellingson - Eric Martini Eric Williams Erkki Seppälä - EugeneTel Evan Rose + Fancy Ants Studios + Fekinox Felix Kollmann + fengjiongmax Flaredown - Florian Richer + Forty Doubleu FuDiggity G3Dev sà rl Gadzhi Kharkharov gamedev by Celio Gary Hulst George Marques - gmmath Greg Olson GREGORY C FEIN Greg P @@ -334,16 +327,13 @@ generous deed immortalized in the next stable release of Godot Engine. Iiari IndustrialRobot Isaac Morton - Jack Newley Jaiden Gerig Jaime Ruiz-Borau Vizárraga Jako Danar James A F Manley Jannik Gröger Jax - Jed Jeff Hungerford - Jeff Nyte Jennifer Graves Jeremy Kahn Jesse Dubay @@ -360,7 +350,6 @@ generous deed immortalized in the next stable release of Godot Engine. Jon Bonazza Jon Sully Jose Aleman - Jose Andrés Mejias Rojas Jose C. Rubio Joseph Catrambone Juanfran @@ -369,7 +358,6 @@ generous deed immortalized in the next stable release of Godot Engine. JungleRobba Justin Spedding Kaiser Bald0 - Kamuna Kauzig KC Chan Keedong Park @@ -389,7 +377,6 @@ generous deed immortalized in the next stable release of Godot Engine. Lionel Gaillard LunaticInAHat Lurkars - Macil Major Haul Malcolm Malik Ahmed @@ -422,7 +409,6 @@ generous deed immortalized in the next stable release of Godot Engine. Neil Blakey-Milner Nerdforge Nicholas - Nicholas Bettencourt Nick Macholl Niclas Eriksen Nicolás Montaña @@ -439,6 +425,7 @@ generous deed immortalized in the next stable release of Godot Engine. Paul Gieske Paul Mason PaweÅ‚ Kowal + Pedro Assuncao Penguin Petrus Prinsloo Philip Cohoe @@ -451,7 +438,6 @@ generous deed immortalized in the next stable release of Godot Engine. Raphael Leroux Remi Rampin Rémi Verschelde - Rezgi Ricardo Alcantara Richard Diss Richard Ivánek @@ -476,11 +462,10 @@ generous deed immortalized in the next stable release of Godot Engine. Shane Shane Sicienski Shane Spoor - Simon Ledam Simon Wenner SK smbe19 - Sootstone + Stonepyre Svenne Krap tezuvholovdr thomas @@ -489,7 +474,6 @@ generous deed immortalized in the next stable release of Godot Engine. tiansheng li Tim Drumheller Timothy B. MacDonald - TJRHTK Tobbun Tom Fulp Tom Glenn @@ -499,9 +483,11 @@ generous deed immortalized in the next stable release of Godot Engine. Troy Bonneau Tryggve Sollid Turgut Temucin + Tyler Compton Tyler Stafos UltyX Vaiktorg + Vaughan Ling Victor Vigilant Watch Vincent Cloutier @@ -514,7 +500,7 @@ generous deed immortalized in the next stable release of Godot Engine. Wout Standaert Wyatt Goodin Yegor - è•æƒŸå… + Yuri Sizov ## Bronze donors diff --git a/core/math/geometry.cpp b/core/math/geometry.cpp index ada5107a2c..ee7feba19e 100644 --- a/core/math/geometry.cpp +++ b/core/math/geometry.cpp @@ -97,8 +97,6 @@ void Geometry::MeshData::optimize_vertices() { vertices = new_vertices; } -Vector<Vector<Vector2> > (*Geometry::_decompose_func)(const Vector<Vector2> &p_polygon) = NULL; - struct _FaceClassify { struct _Link { diff --git a/core/math/geometry.h b/core/math/geometry.h index 8b0a51c651..db4b82e8ce 100644 --- a/core/math/geometry.h +++ b/core/math/geometry.h @@ -853,15 +853,6 @@ public: return triangles; } - static Vector<Vector<Vector2> > (*_decompose_func)(const Vector<Vector2> &p_polygon); - static Vector<Vector<Vector2> > decompose_polygon(const Vector<Vector2> &p_polygon) { - - if (_decompose_func) - return _decompose_func(p_polygon); - - return Vector<Vector<Vector2> >(); - } - static bool is_polygon_clockwise(const Vector<Vector2> &p_polygon) { int c = p_polygon.size(); if (c < 3) diff --git a/core/variant_op.cpp b/core/variant_op.cpp index ea9e29e744..ae47397558 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -1118,6 +1118,8 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, CASE_TYPE(math, OP_SHIFT_LEFT, INT) { if (p_b.type != INT) _RETURN_FAIL; + if (p_b._data._int < 0 || p_b._data._int >= 64) + _RETURN_FAIL; _RETURN(p_a._data._int << p_b._data._int); } @@ -1129,6 +1131,8 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, CASE_TYPE(math, OP_SHIFT_RIGHT, INT) { if (p_b.type != INT) _RETURN_FAIL; + if (p_b._data._int < 0 || p_b._data._int >= 64) + _RETURN_FAIL; _RETURN(p_a._data._int >> p_b._data._int); } diff --git a/doc/classes/HTTPClient.xml b/doc/classes/HTTPClient.xml index 57d2c6ff96..3a63b2dc07 100644 --- a/doc/classes/HTTPClient.xml +++ b/doc/classes/HTTPClient.xml @@ -112,13 +112,13 @@ Generates a GET/POST application/x-www-form-urlencoded style query string from a provided dictionary, e.g.: [codeblock] var fields = {"username": "user", "password": "pass"} - String query_string = http_client.query_string_from_dict(fields) + var query_string = http_client.query_string_from_dict(fields) # Returns "username=user&password=pass" [/codeblock] Furthermore, if a key has a [code]null[/code] value, only the key itself is added, without equal sign and value. If the value is an array, for each value in it a pair with the same key is added. [codeblock] var fields = {"single": 123, "not_valued": null, "multiple": [22, 33, 44]} - String query_string = http_client.query_string_from_dict(fields) + var query_string = http_client.query_string_from_dict(fields) # Returns "single=123&not_valued&multiple=22&multiple=33&multiple=44" [/codeblock] </description> diff --git a/doc/classes/Mesh.xml b/doc/classes/Mesh.xml index f7b3b0d7ea..d4804930e1 100644 --- a/doc/classes/Mesh.xml +++ b/doc/classes/Mesh.xml @@ -40,6 +40,14 @@ Generate a [TriangleMesh] from the mesh. </description> </method> + <method name="get_aabb" qualifiers="const"> + <return type="AABB"> + </return> + <description> + Returns the smallest [AABB] enclosing this mesh. Not affected by [code]custom_aabb[/code]. + [b]Note:[/b] This is only implemented for [ArrayMesh] and [PrimitiveMesh]. + </description> + </method> <method name="get_faces" qualifiers="const"> <return type="PoolVector3Array"> </return> diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 57940a2507..20a1a182e3 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -437,6 +437,9 @@ <member name="display/window/vsync/vsync_via_compositor" type="bool" setter="" getter="" default="false"> If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], enables vertical synchronization via the operating system's window compositor when in windowed mode and the compositor is enabled. This will prevent stutter in certain situations. (Windows only.) </member> + <member name="display/window/ios/hide_home_indicator" type="bool" setter="" getter="" default="true"> + If [code]true[/code], the home indicator is hidden automatically. This only affects iOS devices without a physical home button. + </member> <member name="editor/script_templates_search_path" type="String" setter="" getter="" default=""res://script_templates""> </member> <member name="editor/search_in_file_extensions" type="PoolStringArray" setter="" getter="" default="PoolStringArray( "gd", "shader" )"> diff --git a/doc/classes/Tween.xml b/doc/classes/Tween.xml index aa995e6cbe..cf75e71358 100644 --- a/doc/classes/Tween.xml +++ b/doc/classes/Tween.xml @@ -34,9 +34,9 @@ </argument> <argument index="5" name="duration" type="float"> </argument> - <argument index="6" name="trans_type" type="int" enum="Tween.TransitionType"> + <argument index="6" name="trans_type" type="int" enum="Tween.TransitionType" default="0"> </argument> - <argument index="7" name="ease_type" type="int" enum="Tween.EaseType"> + <argument index="7" name="ease_type" type="int" enum="Tween.EaseType" default="2"> </argument> <argument index="8" name="delay" type="float" default="0"> </argument> @@ -60,9 +60,9 @@ </argument> <argument index="5" name="duration" type="float"> </argument> - <argument index="6" name="trans_type" type="int" enum="Tween.TransitionType"> + <argument index="6" name="trans_type" type="int" enum="Tween.TransitionType" default="0"> </argument> - <argument index="7" name="ease_type" type="int" enum="Tween.EaseType"> + <argument index="7" name="ease_type" type="int" enum="Tween.EaseType" default="2"> </argument> <argument index="8" name="delay" type="float" default="0"> </argument> @@ -137,9 +137,9 @@ </argument> <argument index="4" name="duration" type="float"> </argument> - <argument index="5" name="trans_type" type="int" enum="Tween.TransitionType"> + <argument index="5" name="trans_type" type="int" enum="Tween.TransitionType" default="0"> </argument> - <argument index="6" name="ease_type" type="int" enum="Tween.EaseType"> + <argument index="6" name="ease_type" type="int" enum="Tween.EaseType" default="2"> </argument> <argument index="7" name="delay" type="float" default="0"> </argument> @@ -161,9 +161,9 @@ </argument> <argument index="4" name="duration" type="float"> </argument> - <argument index="5" name="trans_type" type="int" enum="Tween.TransitionType"> + <argument index="5" name="trans_type" type="int" enum="Tween.TransitionType" default="0"> </argument> - <argument index="6" name="ease_type" type="int" enum="Tween.EaseType"> + <argument index="6" name="ease_type" type="int" enum="Tween.EaseType" default="2"> </argument> <argument index="7" name="delay" type="float" default="0"> </argument> @@ -292,9 +292,9 @@ </argument> <argument index="5" name="duration" type="float"> </argument> - <argument index="6" name="trans_type" type="int" enum="Tween.TransitionType"> + <argument index="6" name="trans_type" type="int" enum="Tween.TransitionType" default="0"> </argument> - <argument index="7" name="ease_type" type="int" enum="Tween.EaseType"> + <argument index="7" name="ease_type" type="int" enum="Tween.EaseType" default="2"> </argument> <argument index="8" name="delay" type="float" default="0"> </argument> @@ -318,9 +318,9 @@ </argument> <argument index="5" name="duration" type="float"> </argument> - <argument index="6" name="trans_type" type="int" enum="Tween.TransitionType"> + <argument index="6" name="trans_type" type="int" enum="Tween.TransitionType" default="0"> </argument> - <argument index="7" name="ease_type" type="int" enum="Tween.EaseType"> + <argument index="7" name="ease_type" type="int" enum="Tween.EaseType" default="2"> </argument> <argument index="8" name="delay" type="float" default="0"> </argument> diff --git a/doc/classes/VisualShaderNodeTexture.xml b/doc/classes/VisualShaderNodeTexture.xml index a94b798745..4150b36c9c 100644 --- a/doc/classes/VisualShaderNodeTexture.xml +++ b/doc/classes/VisualShaderNodeTexture.xml @@ -28,6 +28,8 @@ </constant> <constant name="SOURCE_DEPTH" value="4" enum="Source"> </constant> + <constant name="SOURCE_PORT" value="5" enum="Source"> + </constant> <constant name="TYPE_DATA" value="0" enum="TextureType"> </constant> <constant name="TYPE_COLOR" value="1" enum="TextureType"> diff --git a/doc/classes/float.xml b/doc/classes/float.xml index 4c4ea83157..7164e8cb0a 100644 --- a/doc/classes/float.xml +++ b/doc/classes/float.xml @@ -33,7 +33,7 @@ <argument index="0" name="from" type="String"> </argument> <description> - Cast a [String] value to a floating-point value. This method accepts float value strings like [code]"1.23"[/code] and exponential notation strings for its parameter so calling [code]float("1e3")[/code] will return 1000.0 and calling [code]float("1e-3")[/code] will return 0.001. + Cast a [String] value to a floating-point value. This method accepts float value strings like [code]"1.23"[/code] and exponential notation strings for its parameter so calling [code]float("1e3")[/code] will return 1000.0 and calling [code]float("1e-3")[/code] will return 0.001. Calling this method with an invalid float string will return 0. This method stops parsing at the first invalid character and will return the parsed result so far, so calling [code]float("1a3")[/code] will return 1 while calling [code]float("1e3a2")[/code] will return 1000.0. </description> </method> </methods> diff --git a/drivers/SCsub b/drivers/SCsub index d7003a07ce..d91d98a713 100644 --- a/drivers/SCsub +++ b/drivers/SCsub @@ -33,11 +33,6 @@ else: # Core dependencies SConscript("png/SCsub") -# Tools override -# FIXME: Should likely be integrated in the tools/ codebase -if env['tools']: - SConscript("convex_decomp/SCsub") - if env['vsproj']: import os path = os.getcwd() diff --git a/drivers/convex_decomp/SCsub b/drivers/convex_decomp/SCsub deleted file mode 100644 index 65ba5332b7..0000000000 --- a/drivers/convex_decomp/SCsub +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env python - -Import('env') - -env.add_source_files(env.drivers_sources, "*.cpp") - -# Thirdparty dependencies -thirdparty_dir = "#thirdparty/b2d_convexdecomp/" -thirdparty_sources = [ - "b2Polygon.cpp", - "b2Triangle.cpp", -] -thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] - -env_thirdparty = env.Clone() -env_thirdparty.disable_warnings() -env_thirdparty.add_source_files(env.drivers_sources, thirdparty_sources) diff --git a/drivers/convex_decomp/b2d_decompose.cpp b/drivers/convex_decomp/b2d_decompose.cpp deleted file mode 100644 index 7b16b6e752..0000000000 --- a/drivers/convex_decomp/b2d_decompose.cpp +++ /dev/null @@ -1,162 +0,0 @@ -/*************************************************************************/ -/* b2d_decompose.cpp */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2019 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2019 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#include "b2d_decompose.h" - -#include "thirdparty/b2d_convexdecomp/b2Polygon.h" - -namespace b2ConvexDecomp { - -void add_to_res(Vector<Vector<Vector2> > &res, const b2Polygon &p_poly) { - - Vector<Vector2> arr; - for (int i = 0; i < p_poly.nVertices; i++) { - - arr.push_back(Vector2(p_poly.x[i], p_poly.y[i])); - } - - res.push_back(arr); -} - -static Vector<Vector<Vector2> > _b2d_decompose(const Vector<Vector2> &p_polygon) { - - Vector<Vector<Vector2> > res; - if (p_polygon.size() < 3) - return res; - - b2Vec2 *polys = memnew_arr(b2Vec2, p_polygon.size()); - for (int i = 0; i < p_polygon.size(); i++) - polys[i] = b2Vec2(p_polygon[i].x, p_polygon[i].y); - - b2Polygon *p = new b2Polygon(polys, p_polygon.size()); - b2Polygon *decomposed = new b2Polygon[p->nVertices - 2]; //maximum number of polys - - memdelete_arr(polys); - - int32 nPolys = DecomposeConvex(p, decomposed, p->nVertices - 2); - //int32 extra = 0; - for (int32 i = 0; i < nPolys; ++i) { - // b2FixtureDef* toAdd = &pdarray[i+extra]; - // *toAdd = *prototype; - //Hmm, shouldn't have to do all this... - b2Polygon curr = decomposed[i]; - //TODO ewjordan: move this triangle handling to a better place so that - //it happens even if this convenience function is not called. - if (curr.nVertices == 3) { - //Check here for near-parallel edges, since we can't - //handle this in merge routine - for (int j = 0; j < 3; ++j) { - int32 lower = (j == 0) ? (curr.nVertices - 1) : (j - 1); - int32 middle = j; - int32 upper = (j == curr.nVertices - 1) ? (0) : (j + 1); - float32 dx0 = curr.x[middle] - curr.x[lower]; - float32 dy0 = curr.y[middle] - curr.y[lower]; - float32 dx1 = curr.x[upper] - curr.x[middle]; - float32 dy1 = curr.y[upper] - curr.y[middle]; - float32 norm0 = sqrtf(dx0 * dx0 + dy0 * dy0); - float32 norm1 = sqrtf(dx1 * dx1 + dy1 * dy1); - if (!(norm0 > 0.0f && norm1 > 0.0f)) { - //Identical points, don't do anything! - goto Skip; - } - dx0 /= norm0; - dy0 /= norm0; - dx1 /= norm1; - dy1 /= norm1; - float32 cross = dx0 * dy1 - dx1 * dy0; - float32 dot = dx0 * dx1 + dy0 * dy1; - if (fabs(cross) < b2_angularSlop && dot > 0) { - //Angle too close, split the triangle across from this point. - //This is guaranteed to result in two triangles that satisfy - //the tolerance (one of the angles is 90 degrees) - float32 dx2 = curr.x[lower] - curr.x[upper]; - float32 dy2 = curr.y[lower] - curr.y[upper]; - float32 norm2 = sqrtf(dx2 * dx2 + dy2 * dy2); - if (norm2 == 0.0f) { - goto Skip; - } - dx2 /= norm2; - dy2 /= norm2; - float32 thisArea = curr.GetArea(); - float32 thisHeight = 2.0f * thisArea / norm2; - float32 buffer2 = dx2; - dx2 = dy2; - dy2 = -buffer2; - //Make two new polygons - //printf("dx2: %f, dy2: %f, thisHeight: %f, middle: %d\n",dx2,dy2,thisHeight,middle); - float32 newX1[3] = { curr.x[middle] + dx2 * thisHeight, curr.x[lower], curr.x[middle] }; - float32 newY1[3] = { curr.y[middle] + dy2 * thisHeight, curr.y[lower], curr.y[middle] }; - float32 newX2[3] = { newX1[0], curr.x[middle], curr.x[upper] }; - float32 newY2[3] = { newY1[0], curr.y[middle], curr.y[upper] }; - b2Polygon p1(newX1, newY1, 3); - b2Polygon p2(newX2, newY2, 3); - if (p1.IsUsable()) { - add_to_res(res, p1); - //++extra; - } else if (B2_POLYGON_REPORT_ERRORS) { - printf("Didn't add unusable polygon. Dumping vertices:\n"); - p1.print(); - } - if (p2.IsUsable()) { - add_to_res(res, p2); - - //p2.AddTo(pdarray[i+extra]); - - //bd->CreateFixture(toAdd); - } else if (B2_POLYGON_REPORT_ERRORS) { - printf("Didn't add unusable polygon. Dumping vertices:\n"); - p2.print(); - } - goto Skip; - } - } - } - if (decomposed[i].IsUsable()) { - add_to_res(res, decomposed[i]); - - //decomposed[i].AddTo(*toAdd); - //bd->CreateFixture((const b2FixtureDef*)toAdd); - } else if (B2_POLYGON_REPORT_ERRORS) { - printf("Didn't add unusable polygon. Dumping vertices:\n"); - decomposed[i].print(); - } - Skip:; - } - //delete[] pdarray; - delete[] decomposed; - delete p; - return res; // pdarray; //needs to be deleted after body is created -} -} // namespace b2ConvexDecomp - -Vector<Vector<Vector2> > b2d_decompose(const Vector<Vector2> &p_polygon) { - - return b2ConvexDecomp::_b2d_decompose(p_polygon); -} diff --git a/drivers/convex_decomp/b2d_decompose.h b/drivers/convex_decomp/b2d_decompose.h deleted file mode 100644 index e79f692852..0000000000 --- a/drivers/convex_decomp/b2d_decompose.h +++ /dev/null @@ -1,39 +0,0 @@ -/*************************************************************************/ -/* b2d_decompose.h */ -/*************************************************************************/ -/* This file is part of: */ -/* GODOT ENGINE */ -/* https://godotengine.org */ -/*************************************************************************/ -/* Copyright (c) 2007-2019 Juan Linietsky, Ariel Manzur. */ -/* Copyright (c) 2014-2019 Godot Engine contributors (cf. AUTHORS.md) */ -/* */ -/* Permission is hereby granted, free of charge, to any person obtaining */ -/* a copy of this software and associated documentation files (the */ -/* "Software"), to deal in the Software without restriction, including */ -/* without limitation the rights to use, copy, modify, merge, publish, */ -/* distribute, sublicense, and/or sell copies of the Software, and to */ -/* permit persons to whom the Software is furnished to do so, subject to */ -/* the following conditions: */ -/* */ -/* The above copyright notice and this permission notice shall be */ -/* included in all copies or substantial portions of the Software. */ -/* */ -/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ -/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ -/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ -/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ -/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ -/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ -/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/*************************************************************************/ - -#ifndef B2D_DECOMPOSE_H -#define B2D_DECOMPOSE_H - -#include "core/math/vector2.h" -#include "core/vector.h" - -Vector<Vector<Vector2> > b2d_decompose(const Vector<Vector2> &p_polygon); - -#endif // B2D_DECOMPOSE_H diff --git a/drivers/register_driver_types.cpp b/drivers/register_driver_types.cpp index 20556d98af..148f69872a 100644 --- a/drivers/register_driver_types.cpp +++ b/drivers/register_driver_types.cpp @@ -30,18 +30,9 @@ #include "register_driver_types.h" -#include "core/math/geometry.h" #include "drivers/png/image_loader_png.h" #include "drivers/png/resource_saver_png.h" -#ifdef TOOLS_ENABLED -#include "drivers/convex_decomp/b2d_decompose.h" -#endif - -#ifdef TOOLS_ENABLED -#include "platform/windows/export/export.h" -#endif - static ImageLoaderPNG *image_loader_png; static Ref<ResourceSaverPNG> resource_saver_png; @@ -64,10 +55,6 @@ void unregister_core_driver_types() { } void register_driver_types() { - -#ifdef TOOLS_ENABLED - Geometry::_decompose_func = b2d_decompose; -#endif } void unregister_driver_types() { diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index 4f7432cd65..9b7f255e46 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -185,11 +185,11 @@ void EditorHelp::_class_desc_resized() { void EditorHelp::_add_type(const String &p_type, const String &p_enum) { String t = p_type; - if (t == "") + if (t.empty()) t = "void"; - bool can_ref = (t != "int" && t != "real" && t != "bool" && t != "void") || p_enum != String(); + bool can_ref = (t != "void") || !p_enum.empty(); - if (p_enum != String()) { + if (!p_enum.empty()) { if (p_enum.get_slice_count(".") > 1) { t = p_enum.get_slice(".", 1); } else { @@ -200,7 +200,7 @@ void EditorHelp::_add_type(const String &p_type, const String &p_enum) { const Color type_color = get_color("accent_color", "Editor").linear_interpolate(text_color, 0.5); class_desc->push_color(type_color); if (can_ref) { - if (p_enum == "") { + if (p_enum.empty()) { class_desc->push_meta("#" + t); //class } else { class_desc->push_meta("$" + p_enum); //class diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index f05c7709d4..6b71ee14d5 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -587,11 +587,24 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("icon_color_pressed", "Button", icon_color_pressed); // OptionButton - theme->set_stylebox("normal", "OptionButton", style_widget); - theme->set_stylebox("hover", "OptionButton", style_widget_hover); - theme->set_stylebox("pressed", "OptionButton", style_widget_pressed); - theme->set_stylebox("focus", "OptionButton", style_widget_focus); - theme->set_stylebox("disabled", "OptionButton", style_widget_disabled); + Ref<StyleBoxFlat> style_option_button_normal = style_widget->duplicate(); + Ref<StyleBoxFlat> style_option_button_hover = style_widget_hover->duplicate(); + Ref<StyleBoxFlat> style_option_button_pressed = style_widget_pressed->duplicate(); + Ref<StyleBoxFlat> style_option_button_focus = style_widget_focus->duplicate(); + Ref<StyleBoxFlat> style_option_button_disabled = style_widget_disabled->duplicate(); + + int option_button_arrow_margin = theme->get_icon("GuiOptionArrow", "EditorIcons")->get_size().width + (default_margin_size + 4) * EDSCALE; + style_option_button_normal->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); + style_option_button_hover->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); + style_option_button_pressed->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); + style_option_button_focus->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); + style_option_button_disabled->set_default_margin(MARGIN_RIGHT, option_button_arrow_margin); + + theme->set_stylebox("normal", "OptionButton", style_option_button_normal); + theme->set_stylebox("hover", "OptionButton", style_option_button_hover); + theme->set_stylebox("pressed", "OptionButton", style_option_button_pressed); + theme->set_stylebox("focus", "OptionButton", style_option_button_focus); + theme->set_stylebox("disabled", "OptionButton", style_option_button_disabled); theme->set_color("font_color", "OptionButton", font_color); theme->set_color("font_color_hover", "OptionButton", font_color_hl); diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp index 318fee01f2..68ce709090 100644 --- a/editor/export_template_manager.cpp +++ b/editor/export_template_manager.cpp @@ -691,7 +691,7 @@ ExportTemplateManager::ExportTemplateManager() { template_open = memnew(FileDialog); template_open->set_title(TTR("Select Template File")); - template_open->add_filter("*.tpz ; Godot Export Templates"); + template_open->add_filter("*.tpz ; " + TTR("Godot Export Templates")); template_open->set_access(FileDialog::ACCESS_FILESYSTEM); template_open->set_mode(FileDialog::MODE_OPEN_FILE); template_open->connect("file_selected", this, "_install_from_file", varray(true)); diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 95767a96d8..b261ca4712 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -652,12 +652,12 @@ const char *EditorAssetLibrary::sort_key[SORT_MAX] = { }; const char *EditorAssetLibrary::sort_text[SORT_MAX] = { - "Recently Updated", - "Least Recently Updated", - "Name (A-Z)", - "Name (Z-A)", - "License (A-Z)", // "cost" stores the SPDX license name in the Godot Asset Library. - "License (Z-A)", // "cost" stores the SPDX license name in the Godot Asset Library. + TTRC("Recently Updated"), + TTRC("Least Recently Updated"), + TTRC("Name (A-Z)"), + TTRC("Name (Z-A)"), + TTRC("License (A-Z)"), // "cost" stores the SPDX license name in the Godot Asset Library. + TTRC("License (Z-A)"), // "cost" stores the SPDX license name in the Godot Asset Library. }; const char *EditorAssetLibrary::support_key[SUPPORT_MAX] = { @@ -1383,7 +1383,7 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { search_hb2->add_child(memnew(Label(TTR("Sort:") + " "))); sort = memnew(OptionButton); for (int i = 0; i < SORT_MAX; i++) { - sort->add_item(sort_text[i]); + sort->add_item(TTRGET(sort_text[i])); } search_hb2->add_child(sort); diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index 9e873b641b..66935d047b 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -1176,6 +1176,31 @@ void TileSetEditor::_on_workspace_overlay_draw() { } } +int TileSetEditor::get_grabbed_point(const Vector2 &p_mouse_pos, real_t p_grab_threshold) { + Transform2D xform = workspace->get_transform(); + + int grabbed_point = -1; + real_t min_distance = 1e10; + + for (int i = 0; i < current_shape.size(); i++) { + const real_t distance = xform.xform(current_shape[i]).distance_to(xform.xform(p_mouse_pos)); + if (distance < p_grab_threshold && distance < min_distance) { + min_distance = distance; + grabbed_point = i; + } + } + + return grabbed_point; +} + +bool TileSetEditor::is_within_grabbing_distance_of_first_point(const Vector2 &p_pos, real_t p_grab_threshold) { + Transform2D xform = workspace->get_transform(); + + const real_t distance = xform.xform(current_shape[0]).distance_to(xform.xform(p_pos)); + + return distance < p_grab_threshold; +} + void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { if (tileset.is_null() || !get_current_texture().is_valid()) @@ -1528,18 +1553,19 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { shape_anchor.x *= (size.x + spacing); shape_anchor.y *= (size.y + spacing); } + const real_t grab_threshold = EDITOR_GET("editors/poly_editor/point_grab_radius"); shape_anchor += current_tile_region.position; if (tools[TOOL_SELECT]->is_pressed()) { if (mb.is_valid()) { if (mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { if (edit_mode != EDITMODE_PRIORITY && current_shape.size() > 0) { - for (int i = 0; i < current_shape.size(); i++) { - if ((current_shape[i] - mb->get_position()).length_squared() <= grab_threshold) { - dragging_point = i; - workspace->update(); - return; - } + int grabbed_point = get_grabbed_point(mb->get_position(), grab_threshold); + + if (grabbed_point >= 0) { + dragging_point = grabbed_point; + workspace->update(); + return; } } if ((tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::ATLAS_TILE) && current_tile_region.has_point(mb->get_position())) { @@ -1633,13 +1659,12 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { Vector2 pos = mb->get_position(); pos = snap_point(pos); if (creating_shape) { - if (current_shape.size() > 0) { - if ((pos - current_shape[0]).length_squared() <= grab_threshold) { - if (current_shape.size() > 2) { - close_shape(shape_anchor); - workspace->update(); - return; - } + if (current_shape.size() > 2) { + + if (is_within_grabbing_distance_of_first_point(mb->get_position(), grab_threshold)) { + close_shape(shape_anchor); + workspace->update(); + return; } } current_shape.push_back(pos); @@ -1685,12 +1710,15 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) { } } else if (!mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { if (creating_shape) { - if ((current_shape[0] - current_shape[1]).length_squared() <= grab_threshold) { + + // if the first two corners are within grabbing distance of one another, expand the rect to fill the tile + if (is_within_grabbing_distance_of_first_point(current_shape[1], grab_threshold)) { current_shape.set(0, snap_point(shape_anchor)); current_shape.set(1, snap_point(shape_anchor + Vector2(current_tile_region.size.x, 0))); current_shape.set(2, snap_point(shape_anchor + current_tile_region.size)); current_shape.set(3, snap_point(shape_anchor + Vector2(0, current_tile_region.size.y))); } + close_shape(shape_anchor); workspace->update(); return; diff --git a/editor/plugins/tile_set_editor_plugin.h b/editor/plugins/tile_set_editor_plugin.h index 944dc04e4e..5ff86000c5 100644 --- a/editor/plugins/tile_set_editor_plugin.h +++ b/editor/plugins/tile_set_editor_plugin.h @@ -244,6 +244,8 @@ private: void update_workspace_tile_mode(); void update_workspace_minsize(); void update_edited_region(const Vector2 &end_point); + int get_grabbed_point(const Vector2 &p_mouse_pos, real_t grab_threshold); + bool is_within_grabbing_distance_of_first_point(const Vector2 &p_pos, real_t p_grab_threshold); int get_current_tile() const; void set_current_tile(int p_id); diff --git a/editor/project_export.cpp b/editor/project_export.cpp index 617ad62d4a..0a9ecca79c 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -253,9 +253,9 @@ void ProjectExportDialog::_edit_preset(int p_index) { TreeItem *patch_add = patches->create_item(patch_root); patch_add->set_metadata(0, patchlist.size()); if (patchlist.size() == 0) - patch_add->set_text(0, "Add initial export..."); + patch_add->set_text(0, TTR("Add initial export...")); else - patch_add->set_text(0, "Add previous patches..."); + patch_add->set_text(0, TTR("Add previous patches...")); patch_add->add_button(0, get_icon("folder", "FileDialog"), 1); diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index a38c6b98cc..a780b117e1 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -233,14 +233,23 @@ void EditorSettingsDialog::_update_shortcuts() { section->set_custom_bg_color(1, get_color("prop_subsection", "Editor")); } - if (shortcut_filter.is_subsequence_ofi(sc->get_name()) || shortcut_filter.is_subsequence_ofi(sc->get_as_text())) { + // Don't match unassigned shortcuts when searching for assigned keys in search results. + // This prevents all unassigned shortcuts from appearing when searching a string like "no". + if (shortcut_filter.is_subsequence_ofi(sc->get_name()) || (sc->get_as_text() != "None" && shortcut_filter.is_subsequence_ofi(sc->get_as_text()))) { TreeItem *item = shortcuts->create_item(section); item->set_text(0, sc->get_name()); item->set_text(1, sc->get_as_text()); + if (!sc->is_shortcut(original) && !(sc->get_shortcut().is_null() && original.is_null())) { item->add_button(1, get_icon("Reload", "EditorIcons"), 2); } + + if (sc->get_as_text() == "None") { + // Fade out unassigned shortcut labels for easier visual grepping. + item->set_custom_color(1, get_color("font_color", "Label") * Color(1, 1, 1, 0.5)); + } + item->add_button(1, get_icon("Edit", "EditorIcons"), 0); item->add_button(1, get_icon("Close", "EditorIcons"), 1); item->set_tooltip(0, E->get()); diff --git a/editor/translations/af.po b/editor/translations/af.po index 329d165510..5d0b920ef4 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -3519,6 +3519,10 @@ msgid "Select Template File" msgstr "Skep Vouer" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4965,6 +4969,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Lisensie" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Lisensie" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -9088,6 +9118,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Gunstelinge:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index 9ffb777a0f..949bb8c162 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -30,12 +30,13 @@ # PhoenixHO <oussamahaddouche0@gmail.com>, 2019. # orcstudio <orcstudio@orcstudio.org>, 2019. # Rachid Graphicos <graphicos1d@gmail.com>, 2019. +# traveller010 <manar.bushnaq.001@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-10-04 03:15+0000\n" -"Last-Translator: Omar Aglan <omar.aglan91@yahoo.com>\n" +"PO-Revision-Date: 2019-12-12 09:06+0000\n" +"Last-Translator: traveller010 <manar.bushnaq.001@gmail.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -44,7 +45,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 3.9-dev\n" +"X-Generator: Weblate 3.10-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -182,29 +183,24 @@ msgid "Anim Change Call" msgstr "نداء تغيير التØريك" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "تغيير وقت الإطار الرئيسي للØركة" +msgstr "وقت الإطار متعدد التغييرات للرسم المتØرك" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "تغيير المقطع الإنتقالي" +msgstr "المراØÙ„ الانتقالية للرسم المتØرك متعدد التغييرات" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "تØويل تغيير التØريك" +msgstr "التَØَوّل متعدد التغيير للرسوم المتØركة" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "تغيير قيمة الإطار الأساسي للØركة" +msgstr "قيمة الإطار متعدد التغييرات للرسم المتØرك" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "نداء تغيير التØريك" +msgstr "استدعاء الرسوم المتØركة متعددة التغيير" #: editor/animation_track_editor.cpp msgid "Change Animation Length" @@ -443,9 +439,8 @@ msgid "Not possible to add a new track without a root" msgstr "لا يمكن إضاÙØ© مقطع جديد بدون جذر" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Bezier Track" -msgstr "إضاÙØ© مسار" +msgstr "إضاÙØ© مسار لمنØنى بريزير" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." @@ -517,12 +512,12 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" -msgstr "" +msgstr "تØذير: تعديل رسوم متØركة مستوردة" #: editor/animation_track_editor.cpp #, fuzzy msgid "Select an AnimationPlayer node to create and edit animations." -msgstr "Øدد مشغل Øركة من شجرة المشهد لكي تعدل الØركة." +msgstr "إختر مشغل الرسم المتØرك من شجرة المشهد لكي تنشئ أو تعدل الØركة." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -533,9 +528,8 @@ msgid "Group tracks by node or display them as plain list." msgstr "قم بتجميع المقاطع Øسب العقد (Nodes) أو إظهارهم كقائمة بسيطة." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Snap:" -msgstr "خطوة أو خطوات: " +msgstr "إنطباق أو Ù…Øاذاة:" #: editor/animation_track_editor.cpp msgid "Animation step value." @@ -655,9 +649,8 @@ msgid "Scale Ratio:" msgstr "نسبة التكبير:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select Tracks to Copy" -msgstr "Øدد مقاطع لنسخ:" +msgstr "إختر المقاطع المراد نسخها" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -669,9 +662,8 @@ msgid "Copy" msgstr "أنسخ" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select All/None" -msgstr "تØديد الوضع" +msgstr "إختر الكل/لا شيء" #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" @@ -711,12 +703,11 @@ 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 msgid "%d matches." -msgstr "لا مطابقة" +msgstr "%d تطابقات." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -741,7 +732,7 @@ msgstr "المØدد Ùقط" #: editor/code_editor.cpp editor/plugins/script_text_editor.cpp #: editor/plugins/text_editor.cpp msgid "Standard" -msgstr "" +msgstr "معياري" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -768,21 +759,18 @@ msgid "Line and column numbers." msgstr "أرقام الخط Ùˆ العمود." #: editor/connections_dialog.cpp -#, fuzzy msgid "Method in target node must be specified." -msgstr "الطريقة ÙÙŠ العقدة المستهدÙØ© يجب أن تكون Ù…Øدّدة!" +msgstr "يجب تØديد الدالة ÙÙŠ العقدة المستهدÙØ©." #: editor/connections_dialog.cpp -#, fuzzy msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." msgstr "" -"لم يتم العثور على الطريقة المستهدÙØ©! Øدّد طريقة سليمة أو أرÙÙ‚ كود لإستهدا٠" -"العقدة." +"لم يتم العثور على الدالة المستهدÙØ©. Øدّد دالة سليمة أو أرÙÙ‚ كود للعقدة " +"المستهدÙØ©." #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect to Node:" msgstr "صلها بالعقدة:" @@ -791,14 +779,12 @@ msgid "Connect to Script:" msgstr "الإتصال بالمخطوطة:" #: editor/connections_dialog.cpp -#, fuzzy msgid "From Signal:" -msgstr "الإشارات:" +msgstr "من إشارة:" #: editor/connections_dialog.cpp -#, fuzzy 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 @@ -836,7 +822,7 @@ msgstr "مؤجل" #: editor/connections_dialog.cpp msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." -msgstr "" +msgstr "تأخير الإشارة وتخزينها ÙÙŠ قائمة الانتظار Ùˆ تشغيلها Ùقط ÙÙŠ وقت الÙراغ." #: editor/connections_dialog.cpp msgid "Oneshot" @@ -844,12 +830,11 @@ msgstr "لقطة واØدة" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." -msgstr "" +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 @@ -873,7 +858,7 @@ msgstr "وصل" #: editor/connections_dialog.cpp #, fuzzy msgid "Signal:" -msgstr "الإشارات:" +msgstr "إشارة:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" @@ -897,14 +882,12 @@ msgid "Disconnect" msgstr "قطع الاتصال" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect a Signal to a Method" -msgstr "قم بوصل الإشارة: " +msgstr "قم بوصل الإشارة إلى الدالة" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection:" -msgstr "قم بتعديل الإتصال: " +msgstr "تعديل الإتصال:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" @@ -980,22 +963,20 @@ msgid "Dependencies For:" msgstr "تابعة لـ:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" "المشهد '%s' هو Øالياً جاري تعديله.\n" -"التغييرات لن تØصل Øتي يتم إعادة التشغيل." +"ستسري التغييرات Ùقط عند إعادة التØميل." #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" "المورد '%s' قيد الإستخدام.\n" -"التغييرات ستظهر بعد إعادة التشغيل." +" ستسري التغييرات Ùقط عند إعادة التØميل." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -1042,9 +1023,8 @@ msgid "Owners Of:" msgstr "ملاك:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…Ù„Ùات المØددة من المشروع؟ (لا رجعة)" +msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…Ù„Ùات المختارة من المشروع؟ (لا يمكن استعادتها)" #: editor/dependency_editor.cpp msgid "" @@ -1088,9 +1068,8 @@ msgid "Permanently delete %d item(s)? (No undo!)" msgstr "Ø¥Ù…Ø³Ø Ù†Ù‡Ø§Ø¦ÙŠØ§ %d عنصر(عناصر)ØŸ (بلا رجعة!)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Show Dependencies" -msgstr "التبعيات" +msgstr "إظهار التبعيات" #: editor/dependency_editor.cpp msgid "Orphan Resource Explorer" @@ -1181,12 +1160,10 @@ msgid "License" msgstr "الرخصة" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "ترخيص الطر٠الثالث" +msgstr "تراخيص الجهات الخارجية" #: editor/editor_about.cpp -#, fuzzy msgid "" "Godot Engine relies on a number of third-party free and open source " "libraries, all compatible with the terms of its MIT license. The following " @@ -1211,9 +1188,8 @@ msgid "Licenses" msgstr "تراخيص" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "خطأ عندÙØªØ Ù…Ù„Ù Ø§Ù„Øزمة بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"." +msgstr "Øدث خطأ عندÙØªØ Ù…Ù„Ù Ø§Ù„Øزمة بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1281,9 +1257,8 @@ msgid "Delete Bus Effect" msgstr "Ù…Ø³Ø ØªØ£Ø«ÙŠØ± البيوس" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Drag & drop to rearrange." -msgstr "بيوس الصوت، سØب وإسقاط لإعادة الترتيب." +msgstr "إسØب وأسقط لإعادة الترتيب." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1356,7 +1331,7 @@ msgstr "Ø¥ÙØªØ Ù†Ø³Ù‚ بيوس الصوت" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "" +msgstr "لا يوجد مل٠'s%'." #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" @@ -1413,9 +1388,8 @@ 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 @@ -3592,6 +3566,11 @@ msgid "Select Template File" msgstr "Øدد مل٠القالب" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "إدارة قوالب التصدير" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "‌تصدير مدير القوالب" @@ -5069,6 +5048,32 @@ msgid "Download for this asset is already in progress!" msgstr "تØميل هذا الأصل قيد التنÙيذ أصلاً!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "الرخصة" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "الرخصة" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "الأول" @@ -9301,6 +9306,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "أض٠مدخله" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index da370687cb..1b3b4ff1d9 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -3500,6 +3500,11 @@ msgid "Select Template File" msgstr "Избиране на вÑичко" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Шаблони" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4974,6 +4979,32 @@ msgid "Download for this asset is already in progress!" msgstr "Този актив вече Ñе ÑвалÑ!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Лиценз" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Лиценз" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Ðачална" @@ -9152,6 +9183,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Любими:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index fda8528844..d26da26875 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -6,12 +6,13 @@ # Abdullah Zubair <abdullahzubair109@gmail.com>, 2017. # Tahmid Karim <tahmidk15@gmail.com>, 2016. # Tawhid H. <Tawhidk757@yahoo.com>, 2019. +# Hasibul Hasan <hasibeng78@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-09-26 11:50+0000\n" -"Last-Translator: Tawhid H. <Tawhidk757@yahoo.com>\n" +"PO-Revision-Date: 2019-12-13 09:38+0000\n" +"Last-Translator: Hasibul Hasan <hasibeng78@gmail.com>\n" "Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/" "godot/bn/>\n" "Language: bn\n" @@ -19,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 3.9-dev\n" +"X-Generator: Weblate 3.10-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -39,7 +40,7 @@ msgstr "অবৈধ ইনপà§à¦Ÿ %i (পাস করা হয়নি) ঠ#: core/math/expression.cpp #, fuzzy msgid "self can't be used because instance is null (not passed)" -msgstr "সà§à¦¬ বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যাবে না কারণ উদাহরণটি হলো null(উতà§à¦¤à§€à¦°à§à¦£ হয়নি)" +msgstr "self বà§à¦¯à¦¬à¦¾à¦¹à¦¾à¦° করা যাবে না কারণ instance যà§à¦•à§à¦¤à¦¿à¦¯à§à¦•à§à¦¤ নয়" #: core/math/expression.cpp #, fuzzy @@ -3729,6 +3730,11 @@ msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ অপসারণ #: editor/export_template_manager.cpp #, fuzzy +msgid "Godot Export Templates" +msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡" + +#: editor/export_template_manager.cpp +#, fuzzy msgid "Export Template Manager" msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡" @@ -5257,6 +5263,32 @@ msgid "Download for this asset is already in progress!" msgstr "à¦à¦‡ অà§à¦¯à¦¾à¦¸à§‡à¦Ÿà¦Ÿà¦¿ ইতমধà§à¦¯à§‡ ডাউনলোড হচà§à¦›à§‡!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "লাইসেনà§à¦¸" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "লাইসেনà§à¦¸" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "পà§à¦°à¦¥à¦®" @@ -9618,6 +9650,15 @@ msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨" #: editor/project_export.cpp #, fuzzy +msgid "Add initial export..." +msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp +#, fuzzy msgid "Delete patch '%s' from list?" msgstr "ইনপà§à¦Ÿ অপসারণ করà§à¦¨" @@ -14004,9 +14045,6 @@ msgstr "" #~ msgid "Re-Import Changed Resources" #~ msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿà§‡ রিসোরà§à¦¸-সমূহ পরিবরà§à¦¤à¦¿à¦¤ হয়েছে" -#~ msgid "Loading Export Templates" -#~ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡" - #, fuzzy #~ msgid "" #~ "\n" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index db3074ef51..815508351f 100644 --- a/editor/translations/ca.po +++ b/editor/translations/ca.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-10-04 03:15+0000\n" +"PO-Revision-Date: 2019-12-09 11:36+0000\n" "Last-Translator: roger <616steam@gmail.com>\n" "Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/" "godot/ca/>\n" @@ -21,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.9-dev\n" +"X-Generator: Weblate 3.10-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -63,7 +63,6 @@ msgid "On call to '%s':" msgstr "En la crida a '%s':" #: core/ustring.cpp -#, fuzzy msgid "B" msgstr "B" @@ -72,9 +71,8 @@ msgid "KiB" msgstr "KiB" #: core/ustring.cpp -#, fuzzy msgid "MiB" -msgstr "Mesclar" +msgstr "MiB" #: core/ustring.cpp msgid "GiB" @@ -633,9 +631,8 @@ msgid "Scale Ratio:" msgstr "Relació d'Escala:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select Tracks to Copy" -msgstr "Tria les Pistes per copiar:" +msgstr "Seleccioneu les Pistes a Copiar" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -649,7 +646,7 @@ msgstr "Copia" #: editor/animation_track_editor.cpp #, fuzzy msgid "Select All/None" -msgstr "No seleccionar-ne cap" +msgstr "Seleccionar Totes/Cap" #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" @@ -690,12 +687,12 @@ msgstr "%d ocurrència/es reemplaçades." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy msgid "%d match." -msgstr "S'han trobat %d coincidències." +msgstr "%d coincidència." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy msgid "%d matches." -msgstr "S'han trobat %d coincidències." +msgstr "%d coincidències." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -1152,7 +1149,7 @@ msgstr "Llicència" #: editor/editor_about.cpp #, fuzzy msgid "Third-party Licenses" -msgstr "Llicència externa" +msgstr "Llicències de Tercers" #: editor/editor_about.cpp #, fuzzy @@ -1182,7 +1179,7 @@ msgstr "Llicències" #: editor/editor_asset_installer.cpp editor/project_manager.cpp #, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Error en obrir el paquet d'arxius. El fitxer no té el format zip." +msgstr "Error en obrir el arxiu comprimit, el fitxer no té el format ZIP." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1252,7 +1249,7 @@ msgstr "Elimina l'Efecte de Bus" #: editor/editor_audio_buses.cpp #, fuzzy msgid "Drag & drop to rearrange." -msgstr "Bus d'Àudio, reorganitza Arrossegant i Deixant anar." +msgstr "Arrossegueu i deixeu anar per reordenar." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -2931,8 +2928,9 @@ msgid "Play" msgstr "Reprodueix" #: editor/editor_node.cpp +#, fuzzy msgid "Pause the scene execution for debugging." -msgstr "" +msgstr "Pausa l’execució d’escena per a la depuració." #: editor/editor_node.cpp msgid "Pause Scene" @@ -3544,6 +3542,11 @@ msgid "Select Template File" msgstr "Seleccioneu un Fitxer de Plantilla" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Carregant Plantilles d'Exportació" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Gestor de Plantilles d'Exportació" @@ -4953,6 +4956,32 @@ msgid "Download for this asset is already in progress!" msgstr "Ja s'està baixant aquest actiu!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Llicència" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Llicència" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Primer" @@ -4974,7 +5003,7 @@ msgstr "Tot" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "" +msgstr "Cap resultat per \"%s\"." #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy @@ -5068,8 +5097,9 @@ msgid "Grid Step:" msgstr "Pas de la Graella:" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "Primary Line Every:" -msgstr "" +msgstr "LÃnia principal cada:" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -9222,6 +9252,15 @@ msgid "Runnable" msgstr "Executable" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Afegeix una Entrada" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Eliminar el Pedaç '%s' de la llista?" @@ -9694,8 +9733,9 @@ msgid "Projects" msgstr "Projecte" #: editor/project_manager.cpp +#, fuzzy msgid "Last Modified" -msgstr "" +msgstr "Última modificació" #: editor/project_manager.cpp msgid "Scan" @@ -10350,8 +10390,9 @@ msgid "Delete the root node \"%s\"?" msgstr "Elimina el(s) Node(s) de Graf d'Ombreig" #: editor/scene_tree_dock.cpp +#, fuzzy msgid "Delete node \"%s\" and its children?" -msgstr "" +msgstr "Voleu suprimir el node \"%s\" i els seus fills?" #: editor/scene_tree_dock.cpp #, fuzzy @@ -11069,8 +11110,9 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +#, fuzzy msgid "Expected a string of length 1 (a character)." -msgstr "" +msgstr "S'esperava una cadena de longitud 1 (un carà cter)." #: modules/gdscript/gdscript_functions.cpp #, fuzzy @@ -11585,12 +11627,14 @@ msgid "Can't create function of nodes from nodes of multiple functions." msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Select at least one node with sequence port." -msgstr "" +msgstr "Seleccioneu almenys un node amb port de seqüència." #: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Try to only have one sequence input in selection." -msgstr "" +msgstr "Intenteu tenir només una entrada de seqüència a la selecció." #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -13592,9 +13636,6 @@ msgstr "Les constants no es poden modificar." #~ msgid "Re-Import Changed Resources" #~ msgstr "ReImporta Recursos Modificats" -#~ msgid "Loading Export Templates" -#~ msgstr "Carregant Plantilles d'Exportació" - #, fuzzy #~ msgid "" #~ "\n" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index dfe9b3b4e9..55c9ccf864 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -13,12 +13,14 @@ # Peeter Angelo <contact@peeterangelo.com>, 2019. # VojtechBrezina <vojta.brezina@gmail.com>, 2019. # Garrom Orc Shaman <garromorcshaman@gmail.com>, 2019. +# David HusiÄka <davidek251@seznam.cz>, 2019. +# LuboÅ¡ NeÄas <lubosnecas506@seznam.cz>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-21 15:57+0000\n" -"Last-Translator: VojtechBrezina <vojta.brezina@gmail.com>\n" +"PO-Revision-Date: 2019-12-09 11:36+0000\n" +"Last-Translator: LuboÅ¡ NeÄas <lubosnecas506@seznam.cz>\n" "Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/" "cs/>\n" "Language: cs\n" @@ -26,7 +28,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 3.9-dev\n" +"X-Generator: Weblate 3.10-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -70,31 +72,31 @@ msgstr "PÅ™i volánà '%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" @@ -276,9 +278,8 @@ msgid "Time (s): " msgstr "ÄŒas (s): " #: editor/animation_track_editor.cpp -#, fuzzy msgid "Toggle Track Enabled" -msgstr "Povolit" +msgstr "PÅ™epÃnacà Stopa Povolena" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -2117,7 +2118,7 @@ msgstr "Stáhnout" #: editor/editor_network_profiler.cpp msgid "Up" -msgstr "" +msgstr "Nahoru" #: editor/editor_network_profiler.cpp editor/editor_node.cpp msgid "Node" @@ -2141,7 +2142,7 @@ msgstr "" #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "" +msgstr "Nové okno" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -3561,6 +3562,11 @@ msgid "Select Template File" msgstr "Vybrat soubor Å¡ablony" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Spravovat exportnà šablony" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Správce exportnÃch Å¡ablon" @@ -4660,7 +4666,7 @@ msgstr "" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Cestovat" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." @@ -4974,6 +4980,32 @@ msgid "Download for this asset is already in progress!" msgstr "Stahovánà tohoto assetu právÄ› probÃhá!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licence" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licence" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "PrvnÃ" @@ -9182,6 +9214,15 @@ msgstr "Spustitelný" #: editor/project_export.cpp #, fuzzy +msgid "Add initial export..." +msgstr "PÅ™idat vstup" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp +#, fuzzy msgid "Delete patch '%s' from list?" msgstr "Odstranit" diff --git a/editor/translations/da.po b/editor/translations/da.po index 8c28f898aa..46968e8dca 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -3590,6 +3590,11 @@ msgid "Select Template File" msgstr "Vælg template fil" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Organiser Eksport Skabeloner" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Eksporter Skabelon Manager" @@ -5075,6 +5080,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licens" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licens" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -9268,6 +9299,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Tilføj punkt" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/de.po b/editor/translations/de.po index 76dc2130bc..1f0ec9af2d 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -47,12 +47,13 @@ # Linux User <no-ads@mail.de>, 2019. # David May <wasser@gmail.com>, 2019. # Draco Drache <jan.holger.te@gmail.com>, 2019. +# Jonas <dotchucknorris@gmx.de>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-25 04:04+0000\n" -"Last-Translator: So Wieso <sowieso@dukun.de>\n" +"PO-Revision-Date: 2019-12-12 09:05+0000\n" +"Last-Translator: Jonas <dotchucknorris@gmx.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -3564,6 +3565,11 @@ msgid "Select Template File" msgstr "Vorlagendatei auswählen" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Lade Exportvorlagen" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Exportvorlagenverwaltung" @@ -4958,6 +4964,32 @@ msgid "Download for this asset is already in progress!" msgstr "Dieser Nutzerinhalt wird bereits herunter geladen!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Lizenz" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Lizenz" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Erste" @@ -4979,7 +5011,7 @@ msgstr "Alle" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No results for \"%s\"." -msgstr "Keine Ergebnisse für „%s“." +msgstr "Keine Ergebnisse für \"%s\"." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." @@ -5086,7 +5118,7 @@ msgstr "Rotationsabstand:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale Step:" -msgstr "Skalierungsabschnitte:" +msgstr "Skalierungsschritte:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" @@ -9094,6 +9126,15 @@ msgid "Runnable" msgstr "ausführbar" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Eingangsschnittstelle hinzufügen" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Patch ‚%s‘ von Liste löschen?" @@ -9563,9 +9604,8 @@ msgid "Projects" msgstr "Projekte" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Bearbeitet" +msgstr "Zuletzt bearbeitet" #: editor/project_manager.cpp msgid "Scan" @@ -11694,7 +11734,7 @@ msgstr "Benötigtes Icon wurde nicht in der Vorlage festgelegt." #: platform/javascript/export/export.cpp msgid "Stop HTTP Server" -msgstr "HTTP-Server stoppen" +msgstr "HTTP Server Anhalten" #: platform/javascript/export/export.cpp msgid "Run in Browser" @@ -13576,9 +13616,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Re-Import Changed Resources" #~ msgstr "Veränderte Ressourcen neu importieren" -#~ msgid "Loading Export Templates" -#~ msgstr "Lade Exportvorlagen" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index 1ad8fb046f..2987c5f7eb 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -3484,6 +3484,11 @@ msgid "Select Template File" msgstr "Node(s) löschen" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Ungültige Bilder löschen" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4934,6 +4939,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -9101,6 +9130,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Script hinzufügen" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index 34ff822dc4..7b57188664 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -3346,6 +3346,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4710,6 +4714,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8686,6 +8714,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/el.po b/editor/translations/el.po index 969f63fbd1..6b6b7dd304 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -3541,6 +3541,11 @@ msgid "Select Template File" msgstr "Επιλογή ΑÏχείου Î ÏοτÏπων" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "ΦόÏτωση Ï€ÏοτÏπων εξαγωγής" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "ΔιαχειÏιστής Ï€ÏοτÏπων εξαγωγής" @@ -4953,6 +4958,32 @@ msgid "Download for this asset is already in progress!" msgstr "Η λήψη είναι ήδη σε εξÎλιξη!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Άδεια" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Άδεια" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Î Ïώτο" @@ -9124,6 +9155,15 @@ msgid "Runnable" msgstr "ΕκτελÎσιμο" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Î Ïοσθήκη θÏÏας εισόδου" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "ΔιαγÏαφή ενημÎÏωσης '%s' από την λίστα;" @@ -13664,9 +13704,6 @@ msgstr "Οι σταθεÏÎÏ‚ δεν μποÏοÏν να Ï„ÏÎ¿Ï€Î¿Ï€Î¿Î¹Î·Î¸Î¿Ï #~ msgid "Re-Import Changed Resources" #~ msgstr "Επανεισαγωγή Ï„ÏοποπιημÎνων πόÏων" -#~ msgid "Loading Export Templates" -#~ msgstr "ΦόÏτωση Ï€ÏοτÏπων εξαγωγής" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index 8ce8f7c298..aec7bd1893 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -3432,6 +3432,11 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Mastrumi eksportaj Åablonoj" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4807,6 +4812,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8797,6 +8826,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/es.po b/editor/translations/es.po index 0c04cb5fff..5bc99dd4a6 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -46,8 +46,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-29 14:49+0000\n" -"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" +"PO-Revision-Date: 2019-12-09 11:36+0000\n" +"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" "Language: es\n" @@ -60,7 +60,7 @@ msgstr "" #: 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 "El argumento para convert() es invalido, utiliza constantes TYPE_*." +msgstr "Argumento de tipo inválido para convert(), utiliza constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -3564,6 +3564,11 @@ msgid "Select Template File" msgstr "Selecciona un Archivo de Plantilla" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Cargando plantillas de exportación" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Gestor de Plantillas de Exportación" @@ -4960,6 +4965,32 @@ msgid "Download for this asset is already in progress!" msgstr "¡Éste asset ya está descargándose!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licencia" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licencia" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Primero" @@ -9081,6 +9112,15 @@ msgid "Runnable" msgstr "Ejecutable" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Agregar puerto de entrada" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "¿Eliminar patch '%s' de la lista?" @@ -9550,9 +9590,8 @@ msgid "Projects" msgstr "Proyectos" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Modificado/s" +msgstr "Ultima Modificación" #: editor/project_manager.cpp msgid "Scan" @@ -13583,9 +13622,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Re-Import Changed Resources" #~ msgstr "Reimportar recursos cambiados" -#~ msgid "Loading Export Templates" -#~ msgstr "Cargando plantillas de exportación" - #, fuzzy #~ msgid "" #~ "\n" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index eea6a6da6b..eaeef3d1ba 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-29 14:49+0000\n" +"PO-Revision-Date: 2019-12-09 11:37+0000\n" "Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" @@ -3529,6 +3529,11 @@ msgid "Select Template File" msgstr "Elegir Archivo de Plantilla" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Cargando Plantillas de Exportación" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Gestor de Plantillas de Exportación" @@ -4926,6 +4931,32 @@ msgid "Download for this asset is already in progress!" msgstr "La descarga de este asset ya está en progreso!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licencia" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licencia" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Primero" @@ -9044,6 +9075,15 @@ msgid "Runnable" msgstr "Ejecutable" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Agregar puerto de entrada" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Eliminar parche '%s' de la lista?" @@ -9515,9 +9555,8 @@ msgid "Projects" msgstr "Proyectos" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Modificado/s" +msgstr "Ultima Modificación" #: editor/project_manager.cpp msgid "Scan" @@ -13347,9 +13386,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Re-Import Changed Resources" #~ msgstr "Reimportar Recursos Cambiados" -#~ msgid "Loading Export Templates" -#~ msgstr "Cargando Plantillas de Exportación" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/et.po b/editor/translations/et.po index 05e6e4fb73..8ae92343a4 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -3357,6 +3357,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4726,6 +4730,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8708,6 +8736,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/eu.po b/editor/translations/eu.po index af877a08a2..185dec4340 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -3351,6 +3351,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4715,6 +4719,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8691,6 +8719,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 2376b0ac59..7d5eb43c0f 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -3537,6 +3537,11 @@ msgid "Select Template File" msgstr "انتخاب پرونده قالب" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "مدیریت صدور قالب ها" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -5005,6 +5010,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "مجوز" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "مجوز" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -9215,6 +9246,15 @@ msgstr "" #: editor/project_export.cpp #, fuzzy +msgid "Add initial export..." +msgstr "اÙزودن عمل ورودی" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp +#, fuzzy msgid "Delete patch '%s' from list?" msgstr "ØØ°Ù Ú©Ù†" diff --git a/editor/translations/fi.po b/editor/translations/fi.po index dd1d867ae2..ffa352c674 100644 --- a/editor/translations/fi.po +++ b/editor/translations/fi.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-29 14:49+0000\n" +"PO-Revision-Date: 2019-12-09 11:37+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -3491,6 +3491,11 @@ msgid "Select Template File" msgstr "Valitse mallitiedosto" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Hallinnoi vientimalleja" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Vientimallien hallinta" @@ -4883,6 +4888,32 @@ msgid "Download for this asset is already in progress!" msgstr "Tämän assetin lataus on jo käynnissä!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Lisenssi" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Lisenssi" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Ensimmäinen" @@ -8998,6 +9029,15 @@ msgid "Runnable" msgstr "Suoritettava" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Lisää tuloportti" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Poista päivitys '%s' listasta?" @@ -9463,9 +9503,8 @@ msgid "Projects" msgstr "Projektit" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Muutettu" +msgstr "Viimeksi muutettu" #: editor/project_manager.cpp msgid "Scan" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index 3568aed2ea..91964a5f01 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2019-11-21 14:24+0000\n" +"PO-Revision-Date: 2019-12-12 09:05+0000\n" "Last-Translator: Bakainkorp <Ryan.Bautista86@myhunter.cuny.edu>\n" "Language-Team: Filipino <https://hosted.weblate.org/projects/godot-engine/" "godot/fil/>\n" @@ -657,7 +657,7 @@ msgstr "" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "Pumunta sa Linya" #: editor/code_editor.cpp msgid "Line Number:" @@ -817,7 +817,7 @@ msgstr "Isara" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "Ikabit" #: editor/connections_dialog.cpp msgid "Signal:" @@ -837,7 +837,7 @@ msgstr "" #: editor/connections_dialog.cpp msgid "Connect..." -msgstr "" +msgstr "Ikabit..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3359,6 +3359,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4724,6 +4728,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8707,6 +8735,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index 23b73c25b0..3bec7dcf40 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -73,7 +73,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-12-03 14:05+0000\n" +"PO-Revision-Date: 2019-12-09 11:36+0000\n" "Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" @@ -3597,6 +3597,11 @@ msgid "Select Template File" msgstr "Sélectionner le fichier de modèle" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Gérer les modèles d'exportation" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Gestionnaire d'export de modèles" @@ -4998,6 +5003,32 @@ msgid "Download for this asset is already in progress!" msgstr "Le téléchargement de cette ressource est déjà en cours !" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licence" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licence" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Premier" @@ -9138,6 +9169,15 @@ msgid "Runnable" msgstr "Exécutable" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Ajouter un port d'entrée" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Supprimer le patch « %s » de la liste ?" @@ -9609,9 +9649,8 @@ msgid "Projects" msgstr "Projets" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Modifié" +msgstr "Dernière modification" #: editor/project_manager.cpp msgid "Scan" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index 8b96d258ad..b296c82cd2 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -3353,6 +3353,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4720,6 +4724,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8701,6 +8729,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/he.po b/editor/translations/he.po index db308bff70..f4ca1e490a 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -3531,6 +3531,11 @@ msgid "Select Template File" msgstr "בחירת קובץ ×ª×‘× ×™×ª" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "× ×™×”×•×œ ×ª×‘× ×™×•×ª ייצו×" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "×ž× ×”×œ ×™×™×¦×•× ×ª×‘× ×™×•×ª" @@ -4997,6 +5002,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "רישיון" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "רישיון" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -9191,6 +9222,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "מועדפי×:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index 267e705a88..80934bb8b5 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -3467,6 +3467,10 @@ msgid "Select Template File" msgstr "चयनित फ़ाइलें हटाà¤à¤‚?" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4877,6 +4881,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "लाइसेंस" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "लाइसेंस" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8947,6 +8977,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "पसंदीदा:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/hr.po b/editor/translations/hr.po index 33566267a1..f6ff59130a 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -3369,6 +3369,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4737,6 +4741,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licenca" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licenca" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8732,6 +8762,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index 244d3c903e..5a0ffba23d 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -3636,6 +3636,11 @@ msgid "Select Template File" msgstr "Válasszon sablonfájlt" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Export Sablonok Kezelése" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Export Sablon KezelÅ‘" @@ -5119,6 +5124,32 @@ msgid "Download for this asset is already in progress!" msgstr "Ennek az eszköznek a letöltése már folyamatban van!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licenc" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licenc" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "elsÅ‘" @@ -9383,6 +9414,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Bemenet Hozzáadása" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/id.po b/editor/translations/id.po index 68edb05284..5edf17d1e9 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -21,12 +21,13 @@ # I Dewa Agung Adhinata <agungnata2003@gmail.com>, 2019. # herri siagian <herry.it.2007@gmail.com>, 2019. # MonsterGila <fikrirazor@outlook.co.id>, 2019. +# Modeus Darksono <garuga17@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-10-04 03:15+0000\n" -"Last-Translator: Sofyan Sugianto <sofyanartem@gmail.com>\n" +"PO-Revision-Date: 2019-12-13 09:38+0000\n" +"Last-Translator: Modeus Darksono <garuga17@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" "Language: id\n" @@ -34,7 +35,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 3.9-dev\n" +"X-Generator: Weblate 3.10-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -646,7 +647,6 @@ msgid "Scale Ratio:" msgstr "Rasio Skala:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select Tracks to Copy" msgstr "Pilih track untuk disalin:" @@ -660,9 +660,8 @@ msgid "Copy" msgstr "Kopy" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Select All/None" -msgstr "Pilih Tidak Ada" +msgstr "Pilih Semua/Tidak Pilih Semua" #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" @@ -3516,6 +3515,11 @@ msgid "Select Template File" msgstr "Pilih berkas templat" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Memuat Ekspor Template-template." + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Manajer Templat Ekspor" @@ -4907,6 +4911,32 @@ msgid "Download for this asset is already in progress!" msgstr "Unduhan untuk aset ini sedang diproses!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Lisensi" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Lisensi" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Pertama" @@ -9038,6 +9068,15 @@ msgid "Runnable" msgstr "Dapat dijalankan" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Tambah port masukan" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Hapus entri penambalan '%s' dari daftar?" @@ -12260,13 +12299,12 @@ msgid "(Other)" msgstr "(Yang Lain)" #: scene/main/scene_tree.cpp -#, fuzzy msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" "Lingkungan Baku yang ditetapkan di Pengaturan Proyek (Rendering -> Viewport -" -"> Lingkungan Baku) tidak dapat dimuat" +"> Lingkungan Baku) tidak dapat dimuat." #: scene/main/viewport.cpp msgid "" @@ -12282,14 +12320,12 @@ msgstr "" "beberapa node untuk ditampilkan." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for preview." -msgstr "Ukuran font tidak sah." +msgstr "Sumber tidak sah untuk pratinjau." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for shader." -msgstr "Ukuran font tidak sah." +msgstr "Sumber tidak sah untuk shader." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid comparison function for that type." @@ -12951,9 +12987,6 @@ msgstr "Konstanta tidak dapat dimodifikasi." #~ msgid "Re-Importing" #~ msgstr "Mengimpor ulang" -#~ msgid "Loading Export Templates" -#~ msgstr "Memuat Ekspor Template-template." - #~ msgid "Pick New Name and Location For:" #~ msgstr "Tentukan Nama dan Lokasi Baru untuk:" diff --git a/editor/translations/is.po b/editor/translations/is.po index 50e5bfac37..646ef5bf18 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -3396,6 +3396,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4776,6 +4780,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8801,6 +8829,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/it.po b/editor/translations/it.po index 77b9437753..455873bfd2 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -3555,6 +3555,11 @@ msgid "Select Template File" msgstr "Seleziona file template" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Caricamento Template d'Esportazione" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Gestore Template Esportazione" @@ -4954,6 +4959,32 @@ msgid "Download for this asset is already in progress!" msgstr "Il download per questo asset è già in corso!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licenza" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licenza" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Primo" @@ -9093,6 +9124,15 @@ msgid "Runnable" msgstr "Eseguibile" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Aggiungi porta di Input" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Eliminare patch '%s' dalla lista?" @@ -13401,9 +13441,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Re-Import Changed Resources" #~ msgstr "Re-Importando Risorse Cambiate" -#~ msgid "Loading Export Templates" -#~ msgstr "Caricamento Template d'Esportazione" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index a5697f71d9..3e25e9f0e9 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -3520,6 +3520,11 @@ msgid "Select Template File" msgstr "テンプレートファイルをé¸æŠž" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "エクスãƒãƒ¼ãƒˆã€€ãƒ†ãƒ³ãƒ—レートã®èªã¿è¾¼ã¿" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "テンプレートã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ マãƒãƒ¼ã‚¸ãƒ£ãƒ¼" @@ -4910,6 +4915,32 @@ msgid "Download for this asset is already in progress!" msgstr "ã“ã®ã‚¢ã‚»ãƒƒãƒˆã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã¯æ—¢ã«é€²è¡Œä¸ï¼" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "ライセンス" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "ライセンス" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "最åˆ" @@ -9052,6 +9083,15 @@ msgid "Runnable" msgstr "実行å¯èƒ½" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "入力ãƒãƒ¼ãƒˆã®è¿½åŠ " + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "パッム'%s' をリストã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹?" @@ -13414,10 +13454,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgstr "変更ã—ãŸãƒªã‚½ãƒ¼ã‚¹ã‚’å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ" #, fuzzy -#~ msgid "Loading Export Templates" -#~ msgstr "エクスãƒãƒ¼ãƒˆã€€ãƒ†ãƒ³ãƒ—レートã®èªã¿è¾¼ã¿" - -#, fuzzy #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/ka.po b/editor/translations/ka.po index d4710402f2..353798a3b0 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -3478,6 +3478,10 @@ msgid "Select Template File" msgstr "წáƒáƒ•áƒ¨áƒáƒšáƒáƒ— მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბი?" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4888,6 +4892,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "ლიცენზიáƒ" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "ლიცენზიáƒ" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8982,6 +9012,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "სáƒáƒ§áƒ•áƒáƒ ლები:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index 3aac1a2e39..0d5ffb8eb1 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -18,7 +18,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-25 04:05+0000\n" +"PO-Revision-Date: 2019-12-09 11:37+0000\n" "Last-Translator: ì†¡íƒœì„ <xotjq237@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" @@ -3478,6 +3478,11 @@ msgid "Select Template File" msgstr "템플릿 íŒŒì¼ ì„ íƒí•˜ê¸°" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "내보내기 템플릿 로딩 중" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "내보내기 템플릿 ë§¤ë‹ˆì €" @@ -4861,6 +4866,32 @@ msgid "Download for this asset is already in progress!" msgstr "ì´ ì• ì…‹ì€ ì´ë¯¸ 다운로드 중ì´ì—ìš”!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "ë¼ì´ì„ 스" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "ë¼ì´ì„ 스" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "처ìŒìœ¼ë¡œ" @@ -8934,6 +8965,15 @@ msgid "Runnable" msgstr "실행가능" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "ìž…ë ¥ í¬íŠ¸ 추가하기" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "'%s'ì„(를) 패치 목ë¡ì—ì„œ ì‚ì œí• ê¹Œìš”?" @@ -9390,9 +9430,8 @@ msgid "Projects" msgstr "프로ì 트" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "ìˆ˜ì •ë¨" +msgstr "마지막으로 ìˆ˜ì •ë¨" #: editor/project_manager.cpp msgid "Scan" @@ -13291,9 +13330,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없어요." #~ msgid "Re-Import Changed Resources" #~ msgstr "ë³€ê²½ëœ ë¦¬ì†ŒìŠ¤ 다시 ê°€ì ¸ì˜¤ê¸°" -#~ msgid "Loading Export Templates" -#~ msgstr "내보내기 템플릿 로딩 중" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index 5971331785..44f09a361a 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -3451,6 +3451,10 @@ msgid "Select Template File" msgstr "Pasirinkite Nodus, kuriuos norite importuoti" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4871,6 +4875,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "pirmas" @@ -8966,6 +8994,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "MÄ—gstamiausi:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/lv.po b/editor/translations/lv.po index 97c80f9a22..8ee5f32d43 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -3444,6 +3444,10 @@ msgid "Select Template File" msgstr "IzvÄ“lÄ“ties Å¡o Mapi" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4852,6 +4856,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licence" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licence" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8939,6 +8969,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "FavorÄ«ti:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/mi.po b/editor/translations/mi.po index 693a0f1535..c880cc0c55 100644 --- a/editor/translations/mi.po +++ b/editor/translations/mi.po @@ -3344,6 +3344,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4708,6 +4712,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8684,6 +8712,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/ml.po b/editor/translations/ml.po index 0ea1566617..75b09327f3 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -3354,6 +3354,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4721,6 +4725,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8697,6 +8725,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/ms.po b/editor/translations/ms.po index cef1d6dcc0..4b4bb6cceb 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -3376,6 +3376,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4751,6 +4755,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Lesen" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Lesen" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8753,6 +8783,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index 59a2d5553d..036ad8620a 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -3679,6 +3679,11 @@ msgstr "Velg malfil" #: editor/export_template_manager.cpp #, fuzzy +msgid "Godot Export Templates" +msgstr "HÃ¥ndter Eksportmaler" + +#: editor/export_template_manager.cpp +#, fuzzy msgid "Export Template Manager" msgstr "Eksporter Mal-Manager" @@ -5193,6 +5198,32 @@ msgid "Download for this asset is already in progress!" msgstr "Nedlastning for denne asset'en er allerede i gang!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Lisens" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Lisens" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "første" @@ -9458,6 +9489,15 @@ msgid "Runnable" msgstr "Kjørbar" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Legg til Input" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 3f5fb5908a..76c1adf640 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -3545,6 +3545,11 @@ msgid "Select Template File" msgstr "Selecteer sjabloonbestand" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Beheer Export Templates" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Export Sjabloon Manager" @@ -4979,6 +4984,32 @@ msgid "Download for this asset is already in progress!" msgstr "Download voor dit onderdeel is al bezig!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licentie" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licentie" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Eerste" @@ -9298,6 +9329,15 @@ msgid "Runnable" msgstr "Uitvoerbaar" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Voeg invoer toe" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Verwijder patch '%s' van lijst?" diff --git a/editor/translations/or.po b/editor/translations/or.po index 9585062994..7b7c4d85c4 100644 --- a/editor/translations/or.po +++ b/editor/translations/or.po @@ -3350,6 +3350,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4714,6 +4718,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8690,6 +8718,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index 43b4580dd8..4c4ef7b9c6 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: 2019-11-25 04:05+0000\n" +"PO-Revision-Date: 2019-12-12 09:05+0000\n" "Last-Translator: Tomek <kobewi4e@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" @@ -3524,6 +3524,11 @@ msgid "Select Template File" msgstr "Wybierz plik szablonu" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Wczytywanie szablonów eksportu" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Menedżer szablonów eksportu" @@ -4918,6 +4923,32 @@ msgid "Download for this asset is already in progress!" msgstr "Pobieranie tego zasobu jest już w toku!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licencja" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licencja" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "PoczÄ…tek" @@ -5229,7 +5260,7 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "Alt + RMB: GÅ‚Ä™bokość listy" +msgstr "Alt+PPM: Lista obiektów pod spodem" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -9033,6 +9064,15 @@ msgid "Runnable" msgstr "Uruchamiany" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Dodaj port wejÅ›ciowy" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Usunąć ścieżkÄ™ \"%s\" z listy?" @@ -9499,9 +9539,8 @@ msgid "Projects" msgstr "Projekty" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Zmodyfikowany" +msgstr "Data modyfikacji" #: editor/project_manager.cpp msgid "Scan" @@ -13299,9 +13338,6 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Re-Import Changed Resources" #~ msgstr "Zaimportuj ponownie zmienione zasoby" -#~ msgid "Loading Export Templates" -#~ msgstr "Wczytywanie szablonów eksportu" - #, fuzzy #~ msgid "" #~ "\n" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index fc619b3da7..5b7b72cfd5 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -3452,6 +3452,11 @@ msgid "Select Template File" msgstr "Slit th' Node" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Discharge ye' Variable" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4867,6 +4872,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8989,6 +9018,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Add Signal" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 8ec43fd0e0..2bac1f5a81 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -72,12 +72,14 @@ # Wow Bitch <hahaj@itmailr.com>, 2019. # Alan Tavares <alan1tavares@gmail.com>, 2019. # Rafael Silveira <res883@gmail.com>, 2019. +# Luigi <luigimendeszanchett@gmail.com>, 2019. +# Nicolas Abril <nicolas.abril@protonmail.ch>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2019-12-03 14:05+0000\n" -"Last-Translator: Joaquim Ferreira <joaquimferreira1996@bol.com.br>\n" +"PO-Revision-Date: 2019-12-13 09:38+0000\n" +"Last-Translator: Nicolas Abril <nicolas.abril@protonmail.ch>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -227,14 +229,12 @@ msgid "Anim Multi Change Keyframe Time" msgstr "Alterar Tempo de Quadro-Chave da Animação" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Alterar Transição da Animação" +msgstr "Alterar Transição da Animação Multipla" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Alterar Transformação da Anim" +msgstr "Transformação de Animação com Múltiplas Mudanças" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Value" @@ -754,7 +754,6 @@ msgid "%d match." msgstr "%d correspondência." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." msgstr "%d correspondências." @@ -3054,7 +3053,6 @@ msgstr "" "predefinições de exportação do Android." #: editor/editor_node.cpp -#, fuzzy msgid "" "The Android build template is already installed in this project and it won't " "be overwritten.\n" @@ -3062,7 +3060,8 @@ msgid "" "operation again." msgstr "" "O modelo de compilação do Android já está instalado e não será substituÃdo.\n" -"Remova a pasta \"build\" manualmente antes de tentar esta operação novamente." +"Remova a pasta \"res://android/build\" manualmente antes de tentar esta " +"operação novamente." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3125,9 +3124,8 @@ msgid "Open the previous Editor" msgstr "Abrir o Editor anterior" #: editor/editor_path.cpp -#, fuzzy msgid "No sub-resources found." -msgstr "Nenhuma superfÃcie de origem especificada." +msgstr "Nenhum sub-recurso encontrado." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3138,9 +3136,8 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp -#, fuzzy msgid "Main Script:" -msgstr "Abrir script" +msgstr "Script Principal:" #: editor/editor_plugin_settings.cpp msgid "Edit Plugin" @@ -3575,6 +3572,11 @@ msgid "Select Template File" msgstr "Selecionar o Arquivo de Modelo" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Carregando Modelos de Exportação" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Gerenciador de Exportação de Modelo" @@ -3653,9 +3655,8 @@ msgid "New Inherited Scene" msgstr "Nova Cena Herdada" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Set As Main Scene" -msgstr "Cena Principal" +msgstr "Definido como Cena Principal" #: editor/filesystem_dock.cpp msgid "Open Scenes" @@ -3974,9 +3975,8 @@ msgid "Import As:" msgstr "Importar como:" #: editor/import_dock.cpp -#, fuzzy msgid "Preset" -msgstr "Predefinições" +msgstr "Predefinição" #: editor/import_dock.cpp msgid "Reimport" @@ -4389,14 +4389,12 @@ msgstr "" "possÃvel obter os nomes das trilhas." #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Anim Clips" -msgstr "Clipes de Animação:" +msgstr "Clipes de Animação" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Audio Clips" -msgstr "Clipes de Ãudio:" +msgstr "Clipes de Ãudio" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Functions" @@ -4974,6 +4972,32 @@ msgid "Download for this asset is already in progress!" msgstr "Download deste asset já está em progresso!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licença" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licença" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Primeiro" @@ -5088,9 +5112,8 @@ msgid "Primary Line Every:" msgstr "Linha Primária a Cada:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "steps" -msgstr "2 passos" +msgstr "passos" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" @@ -5101,7 +5124,6 @@ msgid "Rotation Step:" msgstr "Passo de Rotação:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Scale Step:" msgstr "Escala:" @@ -5322,50 +5344,44 @@ msgid "Pan Mode" msgstr "Modo Panorâmico" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Ruler Mode" -msgstr "Modo de InÃcio:" +msgstr "Modo Régua" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle smart snapping." -msgstr "Alternar o snap." +msgstr "Alternar Encaixe Inteligente." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Smart Snap" -msgstr "Usar Snap" +msgstr "Usar Encaixe Inteligente" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Toggle grid snapping." -msgstr "Alternar o snap." +msgstr "Alternar Encaixe de grade." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Grid Snap" -msgstr "Snap de Grade" +msgstr "Usar Encaixe de Grade" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snapping Options" -msgstr "Opções de agarramento" +msgstr "Opções de encaixe" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "Usar Snap de Rotação" +msgstr "Usar Encaixe de Rotação" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Use Scale Snap" -msgstr "Usar Snap" +msgstr "Usar Encaixe Escalar" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" -msgstr "Snap Relativo" +msgstr "Encaixe Relativo" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "Usar Snap de Pixel" +msgstr "Usar Encaixe de Pixel" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart Snapping" @@ -5374,7 +5390,7 @@ msgstr "Encaixe inteligente" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Configure Snap..." -msgstr "Configurar Snap..." +msgstr "Configurar Encaixe..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Parent" @@ -5442,9 +5458,8 @@ msgid "View" msgstr "Visualizar" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Always Show Grid" -msgstr "Mostrar Grade" +msgstr "Sempre Mostrar a Grade" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" @@ -5499,15 +5514,14 @@ msgid "Insert keys (based on mask)." msgstr "Inserir Chaves (baseado na máscara)" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "" "Auto insert keys when objects are translated, rotated or scaled (based on " "mask).\n" "Keys are only added to existing tracks, no new tracks will be created.\n" "Keys must be inserted manually for the first time." msgstr "" -"Inserir chaves automaticamente quando os objetos são transladados, girados " -"em escala (com base na máscara). \n" +"Inserir chaves automaticamente quando os objetos são transladados, " +"rotacionados ou escalados (com base na máscara). \n" "As chaves são adicionadas apenas à s faixas existentes, nenhuma nova trilha " "será criada. \n" "As chaves devem ser inseridas manualmente pela primeira vez." @@ -5712,9 +5726,8 @@ msgid "Hold Shift to edit tangents individually" msgstr "Segure Shift para editar tangentes individualmente" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right click to add point" -msgstr "Clique Direito: Excluir Ponto" +msgstr "Clique com o botão direito para adicionar o ponto" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" @@ -7444,9 +7457,8 @@ msgid "Simplification: " msgstr "Simplificação: " #: editor/plugins/sprite_editor_plugin.cpp -#, fuzzy msgid "Shrink (Pixels): " -msgstr "Produzir (Pixels): " +msgstr "Diminuir (Pixels): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " @@ -7497,9 +7509,8 @@ msgid "(empty)" msgstr "(vazio)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move Frame" -msgstr "Colar Frame" +msgstr "Mover Quadro" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" @@ -7816,9 +7827,8 @@ msgid "Enable Priority" msgstr "Ativar Prioridade" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Filter tiles" -msgstr "Filtrar Arquivos..." +msgstr "Filtros do tile" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Give a TileSet resource to this TileMap to use its tiles." @@ -8134,27 +8144,24 @@ msgid "TileSet" msgstr "Conjunto de Telha" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "No VCS addons are available." -msgstr "Nome pai do nó, se disponÃvel" +msgstr "Nenhum complemento VCS está disponÃvel." #: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp msgid "Error" msgstr "Erro" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "No commit message was provided" -msgstr "Nenhum nome fornecido" +msgstr "Nenhuma mensagem de confirmação foi fornecida" #: editor/plugins/version_control_editor_plugin.cpp msgid "No files added to stage" msgstr "Nenhum arquivo adicionado ao palco" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Commit" -msgstr "Comunidade" +msgstr "Confirmação" #: editor/plugins/version_control_editor_plugin.cpp msgid "VCS Addon is not initialized" @@ -8165,37 +8172,32 @@ msgid "Version Control System" msgstr "Sistema de Controle de Versionamento" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Initialize" -msgstr "Capitalizar" +msgstr "Inicializar" #: editor/plugins/version_control_editor_plugin.cpp msgid "Staging area" msgstr "Ãrea Temporária" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Detect new changes" -msgstr "Criar um novo retângulo." +msgstr "Detectar novas mudanças" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Changes" -msgstr "Alterar" +msgstr "Mudanças" #: editor/plugins/version_control_editor_plugin.cpp msgid "Modified" msgstr "Modificado" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Renamed" -msgstr "Renomear" +msgstr "Renomeado" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Deleted" -msgstr "Excluir" +msgstr "ExcluÃdo" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8203,9 +8205,8 @@ msgid "Typechange" msgstr "Alterar" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "Stage Selected" -msgstr "Excluir Selecionados" +msgstr "Estágio selecionado" #: editor/plugins/version_control_editor_plugin.cpp #, fuzzy @@ -8231,9 +8232,8 @@ msgid "View file diffs before committing them to the latest version" msgstr "Ver aquivos diff antes do commit para a última versão" #: editor/plugins/version_control_editor_plugin.cpp -#, fuzzy msgid "No file diff is active" -msgstr "Nenhum arquivo selecionado!" +msgstr "Nenhuma mudança no arquivo" #: editor/plugins/version_control_editor_plugin.cpp msgid "Detect changes in file diff" @@ -8244,9 +8244,8 @@ msgid "(GLES3 only)" msgstr "(Apenas GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Output" -msgstr "Adicionar saÃda +" +msgstr "Adicionar saÃda" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" @@ -8395,9 +8394,8 @@ msgid "Dodge operator." msgstr "Operador de desvio." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "HardLight operator." -msgstr "Operador HardLight" +msgstr "Operador HardLight." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Lighten operator." @@ -8480,11 +8478,10 @@ msgstr "" "falso." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Returns an associated scalar if the provided boolean value is true or false." msgstr "" -"Retorna um vetor associado se o valor lógico fornecido for verdadeiro ou " +"Retorna um vetor associado se o valor booleano fornecido for verdadeiro ou " "falso." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8724,7 +8721,6 @@ msgid "Returns the square root of the parameter." msgstr "Retorna a raiz quadrada do parâmetro." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8732,20 +8728,19 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"Função SmoothStep( escalar(edge0), escalar(edge1), escalar(x) ).\n" +"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" "Retorna 0.0 se 'x' é menor que 'edge0' e 1.0 se 'x' é maior que 'edge1'. " -"Caso contrário o valor retornado é interpolado entre 0.0 e 1.0 utilizando " +"Caso contrário, o valor retornado é interpolado entre 0.0 e 1.0 utilizando " "polinômios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Função Step( escalar(edge), escalar(x) ).\n" +"Step function( scalar(edge), scalar(x) ).\n" "\n" "Retorna 0.0 se 'x' é menor que 'edge' e 1.0 caso contrário." @@ -8762,9 +8757,8 @@ msgid "Finds the truncated value of the parameter." msgstr "Encontra o valor truncado do parâmetro." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Adds scalar to scalar." -msgstr "Adiciona escalar a escalar." +msgstr "Adiciona um escalar a um escalar." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides scalar by scalar." @@ -8783,43 +8777,36 @@ msgid "Subtracts scalar from scalar." msgstr "Subtrai o escalar do escalar." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar constant." -msgstr "Alterar Constante Escalar" +msgstr "Constante Escalar" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar uniform." -msgstr "Alterar Uniforme Escalar" +msgstr "Escalar uniforme." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." msgstr "Execute a pesquisa de textura cúbica." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Perform the texture lookup." -msgstr "Fazer pesquisa da textura." +msgstr "Faz uma busca de texturas." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Cubic texture uniform lookup." -msgstr "Alterar Uniforme da Textura" +msgstr "Pesquisa uniforme de textura cúbica." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "2D texture uniform lookup." -msgstr "Alterar Uniforme da Textura" +msgstr "Consulta de textura 2D uniforme." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "2D texture uniform lookup with triplanar." -msgstr "Alterar Uniforme da Textura" +msgstr "Consulta de textura 2D uniforme com triplanar." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform function." -msgstr "Diálogo Transformação..." +msgstr "Função Transform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8848,19 +8835,16 @@ msgid "Decomposes transform to four vectors." msgstr "Decompõe transformação em quatro vetores." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Calculates the determinant of a transform." -msgstr "(Somente em GLES3) Calcula o determinante da transform." +msgstr "Calcula o determinante de uma transformada." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Calculates the inverse of a transform." -msgstr "(Somente em GLES3) Calcula a inversa da transform." +msgstr "Calcula a inversa de uma transformada." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Calculates the transpose of a transform." -msgstr "(Somente em GLES3) Calcula a transposta da transform." +msgstr "Calcula a transposta de uma transformada." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies transform by transform." @@ -8911,17 +8895,16 @@ msgid "Calculates the dot product of two vectors." msgstr "Calcula o produto escalar de dois vetores." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Returns the vector that points in the same direction as a reference vector. " "The function has three vector parameters : N, the vector to orient, I, the " "incident vector, and Nref, the reference vector. If the dot product of I and " "Nref is smaller than zero the return value is N. Otherwise -N is returned." msgstr "" -"Retorna um vetor que aponta na mesma direção que um vetor de referência. A " +"Retorna o vetor que aponta na mesma direção que um vetor de referência. A " "função tem três vetores como parâmetros: N, o vetor para orientar, I, o " -"vetor incidente, e Nref, o vetor de referência. Se o produto escalar de I e " -"Nref for menor do que zero o valor de retorno é N. Caso contrário -N é " +"vetor incidente, e Nref, o vetor de referência. Se o produto escalar de I e " +"Nref for menor do que zero, o valor de retorno é N. Caso contrário, -N é " "retornado." #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8933,9 +8916,8 @@ msgid "Linear interpolation between two vectors." msgstr "Interpolação linear entre dois vetores." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Interpolação linear entre dois vetores." +msgstr "Interpolação linear entre dois vetores usando escalar." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8950,21 +8932,18 @@ msgid "1.0 / vector" msgstr "1,0 / vetor" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Returns the vector that points in the direction of reflection ( a : incident " "vector, b : normal vector )." msgstr "" -"Retorna um vetor que aponta na direção da reflexão ( a: vetor incidente, b: " +"Retorna o vetor que aponta na direção da reflexão ( a: vetor incidente, b: " "vetor normal )." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the vector that points in the direction of refraction." -msgstr "Retorna um vetor que aponta na direção da refração." +msgstr "Retorna o vetor que aponta na direção da refração." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8972,14 +8951,13 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"Função SmoothStep( escalar(edge0), escalar(edge1), escalar(x) ).\n" +"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" "Retorna 0.0 se 'x' é menor que 'edge0' e 1.0 se 'x' é maior que 'edge1'. " -"Caso contrário o valor retornado é interpolado entre 0.0 e 1.0 utilizando " +"Caso contrário, o valor retornado é interpolado entre 0.0 e 1.0 utilizando " "polinômios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8987,31 +8965,29 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"Função SmoothStep( escalar(edge0), escalar(edge1), escalar(x) ).\n" +"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" "Retorna 0.0 se 'x' é menor que 'edge0' e 1.0 se 'x' é maior que 'edge1'. " -"Caso contrário o valor retornado é interpolado entre 0.0 e 1.0 utilizando " +"Caso contrário, o valor retornado é interpolado entre 0.0 e 1.0 utilizando " "polinômios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Função Step( escalar(edge), escalar(x) ).\n" +"Step function( vector(edge), vector(x) ).\n" "\n" "Retorna 0.0 se 'x' é menor que 'edge' e 1.0 caso contrário." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" -"Função Step( escalar(edge), escalar(x) ).\n" +"Step function( scalar(edge), vector(x) ).\n" "\n" "Retorna 0.0 se 'x' é menor que 'edge' e 1.0 caso contrário." @@ -9147,6 +9123,15 @@ msgid "Runnable" msgstr "Executável" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Adicionar porta de entrada" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Excluir alteração '%s' da lista?" @@ -9236,22 +9221,20 @@ msgid "Resources to export:" msgstr "Recursos para exportar:" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to export non-resource files/folders\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" -"Filtros para exportar arquivos que não sejam recursos (separados por " -"vÃrgula, e.g.: *.json, *.txt)" +"Filtros para exportar arquivos/pastas que não sejam recursos\n" +"(separados por vÃrgula, e.g.: *.json, *.txt)" #: editor/project_export.cpp -#, fuzzy msgid "" "Filters to exclude files/folders from project\n" "(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" -"Filtros para excluir arquivos do projeto (separados por vÃrgula, ex.: *." -"json, *.txt)" +"Filtros para excluir arquivos/pastas do projeto\n" +"(separados por vÃrgula, ex.: *.json, *.txt)" #: editor/project_export.cpp msgid "Patches" @@ -9481,9 +9464,8 @@ msgid "Unnamed Project" msgstr "Projeto Sem Nome" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Importar Projeto Existente" +msgstr "Projeto ausente" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." @@ -9498,7 +9480,6 @@ msgid "Are you sure to open more than one project?" msgstr "Tem certeza de que quer abrir mais de um projeto?" #: editor/project_manager.cpp -#, fuzzy msgid "" "The following project settings file does not specify the version of Godot " "through which it was created.\n" @@ -9510,16 +9491,16 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" -"O seguinte arquivo de configurações do projeto foi gerado por uma versão " -"mais antiga do Godot e precisa ser convertido para esta versão:\n" +"O seguinte arquivo de configurações do projeto não especifica com qual " +"versão do Godot ele foi criado.\n" "\n" "%s\n" "\n" -"Você deseja realizar a conversão?\n" -"Aviso: você não poderá mais abrir o projeto com versões anteriores do Godot." +"Se escolher abrÃ-lo, será convertido para o formato atual de arquivo de " +"configuração do Godot\n" +"Aviso: Você não poderá mais abrir o projeto com versões anteriores do Godot." #: editor/project_manager.cpp -#, fuzzy msgid "" "The following project settings file was generated by an older engine " "version, and needs to be converted for this version:\n" @@ -9531,13 +9512,13 @@ msgid "" "engine anymore." msgstr "" "O seguinte arquivo de configurações do projeto foi gerado por uma versão " -"mais antiga do mecanismo e precisa ser convertido para esta versão:\n" +"mais antiga da engine, e precisa ser convertido para esta versão:\n" "\n" "%s\n" "\n" -"Você deseja realizar a conversão?\n" -"Aviso: você não poderá mais abrir o projeto com versões anteriores do " -"mecanismo." +"Deseja convertê-lo?\n" +"Aviso: Você não será mais capaz de abrir o projeto com versões anteriores da " +"engine." #: editor/project_manager.cpp msgid "" @@ -9548,15 +9529,14 @@ msgstr "" "mecanismo, cujas configurações não são compatÃveis com esta versão." #: editor/project_manager.cpp -#, fuzzy msgid "" "Can't run project: no main scene defined.\n" "Please edit the project and set the main scene in the Project Settings under " "the \"Application\" category." msgstr "" -"Não foi possÃvel executar o projeto: cena principal não definida.\n" -"Por favor, defina a cena principal nas Configurações do Projeto no menu " -"Projeto." +"Não é possÃvel executar o projeto: nenhuma cena principal definida.\n" +"Por favor, edite o projeto e defina a cena principal nas Configurações do " +"Projeto na categoria \"Aplicativo\"." #: editor/project_manager.cpp msgid "" @@ -9567,63 +9547,62 @@ msgstr "" "Por favor, edite o projeto para iniciar a importação inicial." #: editor/project_manager.cpp -#, fuzzy msgid "Are you sure to run %d projects at once?" -msgstr "Tem certeza de que quer executar mais de um projeto?" +msgstr "Tem certeza de que quer executar %d projetos ao mesmo tempo?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove %d projects from the list?\n" "The project folders' contents won't be modified." -msgstr "Remover projeto da lista? (O conteúdo da pasta não será modificado)" +msgstr "" +"Remover %d projetos da lista?\n" +"O conteúdo das pastas do projeto não será modificado." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove this project from the list?\n" "The project folder's contents won't be modified." -msgstr "Remover projeto da lista? (O conteúdo da pasta não será modificado)" +msgstr "" +"Remover este projeto da lista?\n" +"O conteúdo da pasta do projeto não será modificado." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." -msgstr "Remover projeto da lista? (O conteúdo da pasta não será modificado)" +msgstr "" +"Remover todos os projetos faltantes da lista?\n" +"O conteúdo da pasta dos projetos não será modificado." #: editor/project_manager.cpp -#, fuzzy msgid "" "Language changed.\n" "The interface will update after restarting the editor or project manager." msgstr "" -"Linguagem alterada.\n" -"A interface será atualizada na próxima vez que o editor ou o gerenciador de " -"projetos iniciar." +"Idioma alterado.\n" +"A interface será atualizada após reiniciar o editor ou o gerenciador de " +"projetos." #: editor/project_manager.cpp -#, fuzzy msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" -"Você está para analisar %s pastas por projetos existentes da Godot. Você " -"confirma?" +"Tem certeza que quer escanear %s pastam em busca de projetos Godot " +"existentes?\n" +"Isso pode levar algum tempo." #: editor/project_manager.cpp msgid "Project Manager" msgstr "Gerenciador de Projetos" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Projeto" +msgstr "Projetos" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Modificado" +msgstr "Ultima Modificação" #: editor/project_manager.cpp msgid "Scan" @@ -9638,9 +9617,8 @@ msgid "New Project" msgstr "Novo Projeto" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Missing" -msgstr "Remover ponto" +msgstr "Remover Ausentes" #: editor/project_manager.cpp msgid "Templates" @@ -9655,13 +9633,12 @@ msgid "Can't run project" msgstr "Não é possÃvel executar o projeto" #: editor/project_manager.cpp -#, fuzzy msgid "" "You currently don't have any projects.\n" "Would you like to explore official example projects in the Asset Library?" msgstr "" -"Você não tem nenhum projeto atualmente.\n" -"Gostaria de explorar os projetos de exemplo oficiais na Biblioteca de Assets?" +"Você não tem nenhum projeto no momento.\n" +"Gostaria de explorar projetos de exemplo oficiais na Asset Library?" #: editor/project_settings_editor.cpp msgid "Key " @@ -9844,9 +9821,8 @@ msgid "Settings saved OK." msgstr "Configurações Salvas." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Moved Input Action Event" -msgstr "Adicionar Evento de Ação de Entrada" +msgstr "Evento de Ação de Entrada Movido" #: editor/project_settings_editor.cpp msgid "Override for Feature" @@ -9901,9 +9877,8 @@ msgid "Override For..." msgstr "Sobrescrever Para..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#, fuzzy msgid "The editor must be restarted for changes to take effect." -msgstr "O editor deve ser reiniciado para que as mudanças surtam efeito" +msgstr "O editor deve ser reiniciado para que as alterações tenham efeito." #: editor/project_settings_editor.cpp msgid "Input Map" @@ -10056,9 +10031,8 @@ msgid "Suffix" msgstr "Sufixo" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced Options" -msgstr "Opções avançadas" +msgstr "Opções Avançadas" #: editor/rename_dialog.cpp msgid "Substitute" @@ -10264,23 +10238,20 @@ msgid "Make node as Root" msgstr "Tornar Raiz o Nó" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete %d nodes?" -msgstr "Excluir Nós" +msgstr "Excluir %d nós?" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete the root node \"%s\"?" -msgstr "Deletar Nó(s) de Shader Graph(s)" +msgstr "Excluir o nó raiz \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Delete node \"%s\" and its children?" msgstr "Deletar nó \"%s\" e seus filhos?" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete node \"%s\"?" -msgstr "Excluir Nós" +msgstr "Excluir o nó \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10303,13 +10274,12 @@ msgstr "" "sejam revertidas para o padrão." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "" "Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " "cause all properties of the node to be reverted to their default." msgstr "" -"Desativar \"editable_instance\" fará com que todas as propriedades do nó " -"sejam revertidas para o padrão." +"Habilitar \"Carregar como Placeholder\" desabilitará \"Filhos Editáveis\" e " +"fará que todas as propriedades do nó sejam revertidas para o padrão." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10336,9 +10306,8 @@ msgid "User Interface" msgstr "Interface de Usuário" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Other Node" -msgstr "Excluir Nó" +msgstr "Outro Nó" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -10357,9 +10326,8 @@ msgid "Remove Node(s)" msgstr "Remover Nó(s)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Alterar nome da porta de saÃda" +msgstr "Alterar tipo do(s) nó(s)" #: editor/scene_tree_dock.cpp msgid "" @@ -10394,27 +10362,24 @@ msgid "Load As Placeholder" msgstr "Carregar como Substituto" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Open Documentation" -msgstr "Abrir a documentação" +msgstr "Abrir Documentação" #: editor/scene_tree_dock.cpp msgid "Add Child Node" msgstr "Adicionar Nó Filho" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Expand/Collapse All" -msgstr "Recolher Tudo" +msgstr "Expandir/Colapsar Tudo" #: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "Mudar Tipo" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Reparentar Nó" +msgstr "Reparentar para Novo Nó" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10474,9 +10439,8 @@ msgid "Toggle Visible" msgstr "Alternar Visibilidade" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Unlock Node" -msgstr "Selecionar Nó" +msgstr "Desbloquear Nó" #: editor/scene_tree_editor.cpp #, fuzzy @@ -10484,45 +10448,40 @@ msgid "Button Group" msgstr "Botão 7" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "(Connecting From)" -msgstr "Erro de Conexão" +msgstr "(Conectando de)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" msgstr "Aviso de configuração de nó:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"O nó tem conexão(ões) e grupo(s)\n" +"O nó tem %s conexão(ões) e %s grupo(s).\n" "Clique para mostrar o painel de sinais." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"O nó tem conexões.\n" +"O nó tem %s conexão(ões).\n" "Clique para mostrar o painel de sinais." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"O nó está em grupo(s).\n" +"O nó está em %s grupo(s).\n" "Clique para mostrar o painel de grupos." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open Script:" -msgstr "Abrir script" +msgstr "Abrir Script:" #: editor/scene_tree_editor.cpp msgid "" @@ -10573,39 +10532,32 @@ msgid "Select a Node" msgstr "Selecione um Nó" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is empty." -msgstr "O caminho está vazio" +msgstr "O caminho está vazio." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty." -msgstr "O nome do arquivo está vazio" +msgstr "O nome do arquivo está vazio." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is not local." -msgstr "O caminho não é local" +msgstr "O caminho não é local." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid base path." -msgstr "Caminho base inválido" +msgstr "Caminho base inválido." #: editor/script_create_dialog.cpp -#, fuzzy msgid "A directory with the same name exists." -msgstr "Um diretório de mesmo nome existe" +msgstr "Existe um diretório com o mesmo nome." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid extension." -msgstr "Extensão inválida" +msgstr "Extensão inválida." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Wrong extension chosen." -msgstr "Extensão errada escolhida" +msgstr "Extensão errada escolhida." #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -10620,67 +10572,56 @@ msgid "Error loading script from %s" msgstr "Erro ao carregar script de %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Sobrescrever" +msgstr "Sobrescreve" #: editor/script_create_dialog.cpp msgid "N/A" msgstr "N/D" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script / Choose Location" -msgstr "Abrir Script/Escolher Localização" +msgstr "Abrir Script / Escolher Local" #: editor/script_create_dialog.cpp msgid "Open Script" msgstr "Abrir script" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, it will be reused." -msgstr "O arquivo existe, será reaproveitado" +msgstr "O arquivo existe, será reaproveitado." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid class name." -msgstr "Nome de classe inválido" +msgstr "Nome da classe inválido." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path." -msgstr "Nome ou caminho de pai herdado invláido" +msgstr "Nome ou caminho do pai herdado inválido." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script is valid." -msgstr "Script válido" +msgstr "Script válido." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "Permitidos: a-z, A-Z, 0-9 e _" +msgstr "Permitidos: a-z, A-Z, 0-9, _ e ." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in script (into scene file)." -msgstr "Script embutido (no arquivo da cena)" +msgstr "Script embutido (no arquivo da cena)." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will create a new script file." -msgstr "Criar novo arquivo de script" +msgstr "Criará novo arquivo de script." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will load an existing script file." -msgstr "Carregar arquivo de script existente" +msgstr "Carregará arquivo de script existente." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Class Name:" -msgstr "Nome da Classe" +msgstr "Nome da Classe:" #: editor/script_create_dialog.cpp #, fuzzy @@ -13529,9 +13470,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Re-Import Changed Resources" #~ msgstr "Re-Importar Recursos Alterados" -#~ msgid "Loading Export Templates" -#~ msgstr "Carregando Modelos de Exportação" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index f739893486..5cfd0f8590 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -14,12 +14,13 @@ # SARDON <fabio3_Santos@hotmail.com>, 2017. # Vinicius Gonçalves <viniciusgoncalves21@gmail.com>, 2017. # ssantos <ssantos@web.de>, 2018, 2019. +# Gonçalo Dinis Guerreiro João <goncalojoao205@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-29 14:49+0000\n" -"Last-Translator: João Lopes <linux-man@hotmail.com>\n" +"PO-Revision-Date: 2019-12-09 11:37+0000\n" +"Last-Translator: Gonçalo Dinis Guerreiro João <goncalojoao205@gmail.com>\n" "Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_PT/>\n" "Language: pt_PT\n" @@ -3511,6 +3512,11 @@ msgid "Select Template File" msgstr "Selecionar Ficheiro de Modelo" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Gerir Modelos de Exportação" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Exportar Gestor de Modelos" @@ -4900,6 +4906,32 @@ msgid "Download for this asset is already in progress!" msgstr "A transferência deste Ativo já está em andamento!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licença" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licença" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Primeiro" @@ -9000,6 +9032,15 @@ msgid "Runnable" msgstr "Executável" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Adicionar porta de entrada" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Apagar correção '%s' da lista?" @@ -9468,9 +9509,8 @@ msgid "Projects" msgstr "Projetos" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Modificado" +msgstr "Última modificação" #: editor/project_manager.cpp msgid "Scan" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index f16520008f..df9641e07d 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -3628,6 +3628,11 @@ msgid "Select Template File" msgstr "Selectează fiÈ™ierul È™ablon" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Administrează Șabloanele de Export" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Exportă Managerul de Șabloane" @@ -5108,6 +5113,32 @@ msgid "Download for this asset is already in progress!" msgstr "Descărcarea acestui asset rulează deja!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licență" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licență" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "primul" @@ -9351,6 +9382,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Adaugă Intrare(Input)" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 3cfe0f6353..5c212fe7a7 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -63,7 +63,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-29 14:48+0000\n" +"PO-Revision-Date: 2019-12-09 11:36+0000\n" "Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" @@ -2023,7 +2023,7 @@ 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 "Display All" @@ -2664,7 +2664,7 @@ msgstr "ÐÐ¾Ð²Ð°Ñ Ñцена" #: editor/editor_node.cpp msgid "New Inherited Scene..." -msgstr "ÐÐ¾Ð²Ð°Ñ ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¡Ñ†ÐµÐ½Ð°..." +msgstr "ÐÐ¾Ð²Ð°Ñ ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ñцена..." #: editor/editor_node.cpp msgid "Open Scene..." @@ -3555,6 +3555,11 @@ msgid "Select Template File" msgstr "Выбрать файл шаблона" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Загрузка шаблонов ÑкÑпорта" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Менеджер шаблонов ÑкÑпорта" @@ -3842,7 +3847,7 @@ msgstr "Узлы не в группе" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp msgid "Filter nodes" -msgstr "Ð¤Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð²" +msgstr "Фильтр узлов" #: editor/groups_editor.cpp msgid "Nodes in Group" @@ -4051,7 +4056,7 @@ msgstr "СвойÑтва объекта." #: editor/inspector_dock.cpp msgid "Filter properties" -msgstr "СвойÑтва фильтра" +msgstr "Фильтр ÑвойÑтв" #: editor/inspector_dock.cpp msgid "Changes may be lost!" @@ -4949,6 +4954,32 @@ msgid "Download for this asset is already in progress!" msgstr "Загрузка Ñтого шаблона уже идёт!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "ЛицензиÑ" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "ЛицензиÑ" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "ПерваÑ" @@ -6796,7 +6827,7 @@ msgstr "СпиÑок автозавершениÑ" #: editor/plugins/script_text_editor.cpp msgid "Evaluate Selection" -msgstr "ВычиÑлить выделеннное" +msgstr "ВычиÑлить выделенное" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -9082,6 +9113,15 @@ msgid "Runnable" msgstr "Ðктивный" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Добавить входной порт" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Удалить латку '%s' из ÑпиÑка?" @@ -13368,9 +13408,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Re-Import Changed Resources" #~ msgstr "Переимпортировать изменённые реÑурÑÑ‹" -#~ msgid "Loading Export Templates" -#~ msgstr "Загрузка шаблонов ÑкÑпорта" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/si.po b/editor/translations/si.po index 357ae506ad..37c886bd11 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -3374,6 +3374,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4749,6 +4753,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8756,6 +8784,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index ec290311e0..08e373c7c9 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -3461,6 +3461,11 @@ msgid "Select Template File" msgstr "VytvoriÅ¥ adresár" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "VÅ¡etky vybrané" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4884,6 +4889,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licencia" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licencia" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -9018,6 +9049,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Signály:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index ad23f0c63b..e668419c22 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -3621,6 +3621,11 @@ msgid "Select Template File" msgstr "Izberi datoteko predloge" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Upravljaj Izvozne Predloge" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Izvozni Upravitelj Predlog" @@ -5102,6 +5107,32 @@ msgid "Download for this asset is already in progress!" msgstr "Prenos za ta dodatek je že v teku!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licenca" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licenca" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "prvi" @@ -9326,6 +9357,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Dodaj Vnos" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/sq.po b/editor/translations/sq.po index 1c78705413..dcd3bcb8b4 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -3548,6 +3548,11 @@ msgid "Select Template File" msgstr "Zgjidh skedarin e shabllonit" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Menaxho Shabllonet e Eksportit" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Menaxheri i Shablloneve të Eksportimit" @@ -4950,6 +4955,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Liçensa" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Liçensa" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8999,6 +9030,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Shto te të preferuarat" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index 24eb88b805..50c8b167bf 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -3637,6 +3637,11 @@ msgid "Select Template File" msgstr "Одабери шаблонÑку датотеку" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Управљај извозним шаблонима" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Менаџер извозних шаблона" @@ -5129,6 +5134,32 @@ msgid "Download for this asset is already in progress!" msgstr "Преузимање овог реÑурÑа је у току!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "ЛиценÑа" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "ЛиценÑа" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "први" @@ -9433,6 +9464,15 @@ msgid "Runnable" msgstr "Покретљива" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Додај улаз" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Обриши закрпу „%s“ Ñа лиÑте?" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 22b3059a68..42f8e6441b 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -3391,6 +3391,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4774,6 +4778,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8828,6 +8856,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index 02197303ce..af034aa33b 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -3600,6 +3600,11 @@ msgid "Select Template File" msgstr "Välj mall-fil" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Mallar" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -5080,6 +5085,32 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Licens" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Licens" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -9264,6 +9295,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Favoriter:" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index 7015199f0c..485d7d9b6c 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -3379,6 +3379,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4756,6 +4760,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8760,6 +8788,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/te.po b/editor/translations/te.po index d9136f04b0..34d033ccb2 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -3352,6 +3352,10 @@ msgid "Select Template File" msgstr "" #: editor/export_template_manager.cpp +msgid "Godot Export Templates" +msgstr "" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4716,6 +4720,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8693,6 +8721,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/th.po b/editor/translations/th.po index db9cd3f577..2ede382d78 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -3598,6 +3598,11 @@ msgid "Select Template File" msgstr "เลืà¸à¸à¹„ฟล์à¹à¸¡à¹ˆà¹à¸šà¸š" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "à¸à¸³à¸¥à¸±à¸‡à¹‚หลดà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "จัดà¸à¸²à¸£à¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸" @@ -5083,6 +5088,32 @@ msgid "Download for this asset is already in progress!" msgstr "à¸à¸³à¸¥à¸±à¸‡à¸”าวน์โหลดไฟล์นี้à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "สัà¸à¸à¸²à¸à¸™à¸¸à¸à¸²à¸•" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "สัà¸à¸à¸²à¸à¸™à¸¸à¸à¸²à¸•" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "à¹à¸£à¸à¸ªà¸¸à¸”" @@ -9384,6 +9415,15 @@ msgid "Runnable" msgstr "รันได้" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "ลบà¹à¸žà¸•à¸Šà¹Œ '%s' จาà¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸?" @@ -13611,9 +13651,6 @@ msgstr "" #~ msgid "Re-Import Changed Resources" #~ msgstr "นำเข้ารีซà¸à¸£à¹Œà¸ªà¸—ี่à¹à¸à¹‰à¹„ขà¸à¸µà¸à¸„รั้ง" -#~ msgid "Loading Export Templates" -#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¹‚หลดà¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index 1cbce49f6d..f72bb90ac0 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -3526,6 +3526,11 @@ msgid "Select Template File" msgstr "Åžablon Dosyası Seç" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Dışa Aktarım Kalıpları Yükleniyor" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Dışa Aktarım Åžablonu Yöneticisi" @@ -4922,6 +4927,32 @@ msgid "Download for this asset is already in progress!" msgstr "Bu nesne için zaten sürdürülen bir indirme var!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Lisans" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Lisans" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Ä°lk" @@ -9014,6 +9045,15 @@ msgid "Runnable" msgstr "KoÅŸturulabilir" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "GiriÅŸ noktası ekle" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "'%s' yaması listeden silinsin mi?" @@ -13335,9 +13375,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Re-Import Changed Resources" #~ msgstr "DeÄŸiÅŸtirilmiÅŸ Kaynakları Yeniden İçe Aktar" -#~ msgid "Loading Export Templates" -#~ msgstr "Dışa Aktarım Kalıpları Yükleniyor" - #, fuzzy #~ msgid "" #~ "\n" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index 1b8d883ca1..1f38a1c02b 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-11-25 04:04+0000\n" +"PO-Revision-Date: 2019-12-09 11:36+0000\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" @@ -3514,6 +3514,11 @@ msgid "Select Template File" msgstr "Виберіть файл шаблону" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸ екÑпорту" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "Менеджер екÑпорту шаблонів" @@ -4909,6 +4914,32 @@ msgid "Download for this asset is already in progress!" msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ активу вже виконуєтьÑÑ!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "ЛіцензіÑ" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "ЛіцензіÑ" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Перший" @@ -9032,6 +9063,15 @@ msgid "Runnable" msgstr "Ðктивний" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Додати вхідний порт" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "Вилучити латку «%s» зі ÑпиÑку?" @@ -9498,9 +9538,8 @@ msgid "Projects" msgstr "Проєкти" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "Змінено" +msgstr "ВоÑтаннє змінено" #: editor/project_manager.cpp msgid "Scan" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index e0c20b597a..5546647ac6 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -3411,6 +3411,11 @@ msgid "Select Template File" msgstr ".تمام کا انتخاب" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr ".تمام کا انتخاب" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4810,6 +4815,30 @@ msgid "Download for this asset is already in progress!" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "License (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "" @@ -8905,6 +8934,14 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +msgid "Add initial export..." +msgstr "" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index c20e09409b..8ff39ec400 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -3466,6 +3466,11 @@ msgid "Select Template File" msgstr "Chá»n file template" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "Quản lý mẫu Xuất ra" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -4871,6 +4876,32 @@ msgid "Download for this asset is already in progress!" msgstr "Tải xuống nguyên liệu nà y đã được tiến hà nh!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "Cấp phép" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "Cấp phép" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "Äầu tiên" @@ -9004,6 +9035,15 @@ msgid "Runnable" msgstr "" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "Thêm Input" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index 397f17a1cd..437a6a5f59 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -63,7 +63,7 @@ msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2019-11-29 14:49+0000\n" +"PO-Revision-Date: 2019-12-13 09:38+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" @@ -248,7 +248,7 @@ msgstr "3Då˜æ¢è½¨é“" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "调用方法轨é“" +msgstr "方法调用轨é“" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" @@ -1238,23 +1238,23 @@ msgstr "æ·»åŠ æ•ˆæžœ" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "é‡å‘½å音频总线(Audio Bus)" +msgstr "é‡å‘½å音频总线" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" -msgstr "修改音频Bus音é‡" +msgstr "修改音频总线音é‡" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" -msgstr "切æ¢éŸ³é¢‘独å¥" +msgstr "开关音频总线独å¥" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Mute" -msgstr "切æ¢éŸ³é¢‘é™éŸ³" +msgstr "开关音频总线é™éŸ³" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Bypass Effects" -msgstr "切æ¢éŸ³é¢‘æ—通效果" +msgstr "开关音频总线æ—通效果" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" @@ -1290,7 +1290,7 @@ msgstr "æ—通" #: editor/editor_audio_buses.cpp msgid "Bus options" -msgstr "音频总线选项" +msgstr "总线选项" #: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -1311,11 +1311,11 @@ msgstr "音频" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "æ·»åŠ éŸ³é¢‘æ€»çº¿ï¼ˆAudio Bus)" +msgstr "æ·»åŠ éŸ³é¢‘æ€»çº¿" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "ä¸èƒ½åˆ 除主音频总线!" +msgstr "ä¸èƒ½åˆ 除主音频总线ï¼" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" @@ -1335,7 +1335,7 @@ msgstr "移动音频总线" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As..." -msgstr "将音频Bus布局ä¿å˜ä¸º..." +msgstr "音频总线布局å¦å˜ä¸º..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout..." @@ -1343,7 +1343,7 @@ msgstr "新布局的ä½ç½®..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" -msgstr "打开音频Bus布局" +msgstr "打开音频总线布局" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." @@ -1355,11 +1355,11 @@ msgstr "布局" #: editor/editor_audio_buses.cpp msgid "Invalid file, not an audio bus layout." -msgstr "æ— æ•ˆæ–‡ä»¶,ä¸å˜åœ¨éŸ³é¢‘总线布局。" +msgstr "æ— æ•ˆæ–‡ä»¶ï¼Œä¸æ˜¯éŸ³é¢‘总线布局。" #: editor/editor_audio_buses.cpp msgid "Add Bus" -msgstr "æ·»åŠ Bus" +msgstr "æ·»åŠ æ€»çº¿" #: editor/editor_audio_buses.cpp msgid "Add a new Audio Bus to this layout." @@ -1381,7 +1381,7 @@ msgstr "å¦å˜ä¸º" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "将音频Bus布局ä¿å˜ä¸º..." +msgstr "将该音频总线布局ä¿å˜åˆ°æ–‡ä»¶ã€‚" #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1397,7 +1397,7 @@ msgstr "创建一个新的总线布局。" #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "å称éžæ³•:。" +msgstr "åç§°æ— æ•ˆã€‚" #: editor/editor_autoload_settings.cpp msgid "Valid characters:" @@ -1482,7 +1482,7 @@ msgstr "å称" #: editor/editor_autoload_settings.cpp msgid "Singleton" -msgstr "å•ç‹¬ï¼ˆSingleton)" +msgstr "å•ä¾‹" #: editor/editor_data.cpp msgid "Updating Scene" @@ -1743,7 +1743,7 @@ msgstr "选择æ¤æ–‡ä»¶å¤¹" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "æ‹·è´è·¯å¾„" +msgstr "å¤åˆ¶è·¯å¾„" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Open in File Manager" @@ -2691,7 +2691,7 @@ msgstr "工具" #: editor/editor_node.cpp msgid "Orphan Resource Explorer..." -msgstr "å•ä¸€èµ„æºæµè§ˆå™¨..." +msgstr "å¤ç«‹èµ„æºæµè§ˆå™¨..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -3297,7 +3297,7 @@ msgstr "å¸è½½" #: editor/export_template_manager.cpp msgid "(Installed)" -msgstr "(安装)" +msgstr "(已安装)" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3310,11 +3310,11 @@ msgstr "å¼€å‘构建下官方导出模æ¿ä¸å¯ç”¨ã€‚" #: editor/export_template_manager.cpp msgid "(Missing)" -msgstr "(丢失)" +msgstr "(缺失)" #: editor/export_template_manager.cpp msgid "(Current)" -msgstr "(当å‰)" +msgstr "(当å‰ï¼‰" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait..." @@ -3471,6 +3471,11 @@ msgid "Select Template File" msgstr "选择模æ¿æ–‡ä»¶" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "æ£åœ¨åŠ 载导出模æ¿" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "模æ¿å¯¼å‡ºå·¥å…·" @@ -3916,7 +3921,7 @@ msgstr "编辑资æºå‰ªè´´æ¿" #: editor/inspector_dock.cpp msgid "Copy Resource" -msgstr "æ‹·è´èµ„æº" +msgstr "å¤åˆ¶èµ„æº" #: editor/inspector_dock.cpp msgid "Make Built-In" @@ -4354,7 +4359,7 @@ msgstr "å¤åˆ¶åŠ¨ç”»" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation to copy!" -msgstr "没有需è¦æ‹·è´çš„动画ï¼" +msgstr "没有需è¦å¤åˆ¶çš„动画ï¼" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation resource on clipboard!" @@ -4439,7 +4444,7 @@ msgstr "æ–¹å‘" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" -msgstr "穿过" +msgstr "过去" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" @@ -4845,6 +4850,32 @@ msgid "Download for this asset is already in progress!" msgstr "æ¤èµ„æºæ–‡ä»¶æ£åœ¨ä¸‹è½½ä¸ï¼" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "许å¯è¯" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "许å¯è¯" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "第一项" @@ -5226,7 +5257,7 @@ msgstr "设置å¸é™„..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Parent" -msgstr "å¸é™„到父级" +msgstr "å¸é™„到父节点" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Node Anchor" @@ -5242,7 +5273,7 @@ msgstr "å¸é™„到节点ä¸å¿ƒä½ç½®" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Other Nodes" -msgstr "å¸é™„到其他node节点" +msgstr "å¸é™„到其它节点" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap to Guides" @@ -5366,7 +5397,7 @@ msgstr "æ’入关键帧(已有轨é“)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" -msgstr "æ‹·è´å§¿åŠ¿" +msgstr "å¤åˆ¶å§¿åŠ¿" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" @@ -6275,7 +6306,7 @@ msgstr "AnimationPlayer è·¯å¾„æ— æ•ˆ" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" -msgstr "清ç†å½“å‰æ–‡ä»¶" +msgstr "清除最近打开文件列表" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" @@ -6409,7 +6440,7 @@ msgstr "软é‡è½½è„šæœ¬" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" -msgstr "æ‹·è´è„šæœ¬è·¯å¾„" +msgstr "å¤åˆ¶è„šæœ¬è·¯å¾„" #: editor/plugins/script_editor_plugin.cpp msgid "History Previous" @@ -6462,7 +6493,7 @@ msgstr "å•æ¥è·³è¿‡" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" -msgstr "跳过" +msgstr "æš‚åœ" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp #: editor/script_editor_debugger.cpp @@ -6947,7 +6978,7 @@ msgstr "视图环境" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Gizmos" -msgstr "Gizmos(å¯è§†åŒ–调试工具)" +msgstr "查看控制器" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Information" @@ -7130,7 +7161,7 @@ msgstr "4个视å£" #: editor/plugins/spatial_editor_plugin.cpp msgid "Gizmos" -msgstr "Gizmos(å°å·¥å…·ï¼‰" +msgstr "控制器" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Origin" @@ -7207,7 +7238,7 @@ msgstr "å‘布(Post)" #: editor/plugins/spatial_editor_plugin.cpp msgid "Nameless gizmo" -msgstr "未命åçš„Gizmo" +msgstr "æ— å控制器" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -8889,6 +8920,15 @@ msgid "Runnable" msgstr "å¯æ‰§è¡Œçš„" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "æ·»åŠ è¾“å…¥ç«¯å£" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "从列表ä¸åˆ 除补ä¸''%s'?" @@ -9328,9 +9368,8 @@ msgid "Projects" msgstr "工程" #: editor/project_manager.cpp -#, fuzzy msgid "Last Modified" -msgstr "已修改" +msgstr "修改时间" #: editor/project_manager.cpp msgid "Scan" @@ -9401,7 +9440,7 @@ msgstr "é‡å‘½å输入事件" #: editor/project_settings_editor.cpp msgid "Change Action deadzone" -msgstr "改å˜æ“作隔离区" +msgstr "改å˜åŠ¨ä½œç›²åŒº" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" @@ -9599,7 +9638,7 @@ 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." @@ -9615,11 +9654,11 @@ msgstr "动作:" #: editor/project_settings_editor.cpp msgid "Action" -msgstr "动作(``Action``)" +msgstr "动作" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "隔离区" +msgstr "盲区" #: editor/project_settings_editor.cpp msgid "Device:" @@ -10108,7 +10147,7 @@ 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)" @@ -10216,7 +10255,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Invalid node name, the following characters are not allowed:" -msgstr "节点å称éžæ³•ï¼Œä¸å…许包å«ä»¥ä¸‹å—符:" +msgstr "节点åç§°æ— æ•ˆï¼Œä¸å…许包å«ä»¥ä¸‹å—符:" #: editor/scene_tree_editor.cpp msgid "Rename Node" @@ -10404,15 +10443,15 @@ msgstr "编辑下一个实例" #: editor/script_editor_debugger.cpp msgid "Stack Frames" -msgstr "å †æ ˆå¸§ï¼ˆStack Frames)" +msgstr "æ ˆå¸§" #: editor/script_editor_debugger.cpp msgid "Profiler" -msgstr "性能分æž" +msgstr "性能分æžå™¨" #: editor/script_editor_debugger.cpp msgid "Network Profiler" -msgstr "网络检视" +msgstr "网络分æžå™¨" #: editor/script_editor_debugger.cpp msgid "Monitor" @@ -11207,7 +11246,7 @@ msgstr "è¿ä»£å™¨å¤±æ•ˆï¼š " #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name." -msgstr "属性å称éžæ³•ã€‚" +msgstr "属性åç§°ç´¢å¼•æ— æ•ˆã€‚" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Base object is not a Node!" @@ -13005,9 +13044,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Re-Import Changed Resources" #~ msgstr "é‡æ–°å¯¼å…¥æ”¹å˜çš„资æº" -#~ msgid "Loading Export Templates" -#~ msgstr "æ£åœ¨åŠ 载导出模æ¿" - #~ msgid "" #~ "\n" #~ "Status: Needs Re-Import" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index 59b5a5b7a2..4692a74bc9 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -3642,6 +3642,11 @@ msgid "Select Template File" msgstr "è¦åˆªé™¤é¸ä¸æª”案?" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "管ç†è¼¸å‡ºç¯„本" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "" @@ -5130,6 +5135,32 @@ msgid "Download for this asset is already in progress!" msgstr "Asset已在下載ä¸" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "授權æ¢æ¬¾" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "授權æ¢æ¬¾" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "First" msgstr "首é " @@ -9343,6 +9374,15 @@ msgstr "啟用" #: editor/project_export.cpp #, fuzzy +msgid "Add initial export..." +msgstr "新增訊號" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp +#, fuzzy msgid "Delete patch '%s' from list?" msgstr "刪除" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index 5b360169e1..910c74ada7 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -3620,6 +3620,11 @@ msgid "Select Template File" msgstr "é¸æ“‡ç¯„本檔案" #: editor/export_template_manager.cpp +#, fuzzy +msgid "Godot Export Templates" +msgstr "管ç†è¼¸å‡ºæ¨¡æ¿" + +#: editor/export_template_manager.cpp msgid "Export Template Manager" msgstr "導出範本管ç†å™¨" @@ -5088,6 +5093,32 @@ msgid "Download for this asset is already in progress!" msgstr "æ¤è³‡æºæ–‡æª”æ£åœ¨ä¸‹è¼‰ä¸!" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Least Recently Updated" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (A-Z)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +msgid "Name (Z-A)" +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (A-Z)" +msgstr "授權" + +#: editor/plugins/asset_library_editor_plugin.cpp +#, fuzzy +msgid "License (Z-A)" +msgstr "授權" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "First" msgstr "ç¬¬ä¸€é …" @@ -9309,6 +9340,15 @@ msgid "Runnable" msgstr "å¯é‹è¡Œçš„" #: editor/project_export.cpp +#, fuzzy +msgid "Add initial export..." +msgstr "æ·»åŠ è¼¸å…¥" + +#: editor/project_export.cpp +msgid "Add previous patches..." +msgstr "" + +#: editor/project_export.cpp msgid "Delete patch '%s' from list?" msgstr "" diff --git a/main/main.cpp b/main/main.cpp index cdaee06135..3ac343a3c5 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1126,6 +1126,8 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph OS::get_singleton()->set_low_processor_usage_mode_sleep_usec(GLOBAL_DEF("application/run/low_processor_mode_sleep_usec", 6900)); // Roughly 144 FPS ProjectSettings::get_singleton()->set_custom_property_info("application/run/low_processor_mode_sleep_usec", PropertyInfo(Variant::INT, "application/run/low_processor_mode_sleep_usec", PROPERTY_HINT_RANGE, "0,33200,1,or_greater")); // No negative numbers + GLOBAL_DEF("display/window/ios/hide_home_indicator", true); + Engine::get_singleton()->set_frame_delay(frame_delay); message_queue = memnew(MessageQueue); diff --git a/main/splash_editor.png b/main/splash_editor.png Binary files differindex 8c605f0eed..29931a71db 100644 --- a/main/splash_editor.png +++ b/main/splash_editor.png diff --git a/misc/dist/osx_template.app/Contents/Info.plist b/misc/dist/osx_template.app/Contents/Info.plist index eee787bdaf..696c825594 100755 --- a/misc/dist/osx_template.app/Contents/Info.plist +++ b/misc/dist/osx_template.app/Contents/Info.plist @@ -24,6 +24,10 @@ <string>$signature</string> <key>CFBundleVersion</key> <string>$version</string> + <key>NSMicrophoneUsageDescription</key> + <string>$microphone_usage_description</string> + <key>NSCameraUsageDescription</key> + <string>$camera_usage_description</string> <key>NSHumanReadableCopyright</key> <string>$copyright</string> <key>LSMinimumSystemVersion</key> diff --git a/misc/dist/osx_tools.app/Contents/Info.plist b/misc/dist/osx_tools.app/Contents/Info.plist index bb22f1807c..4b1e8ebbf3 100755 --- a/misc/dist/osx_tools.app/Contents/Info.plist +++ b/misc/dist/osx_tools.app/Contents/Info.plist @@ -24,6 +24,10 @@ <string>godot</string> <key>CFBundleVersion</key> <string>3.2</string> + <key>NSMicrophoneUsageDescription</key> + <string>Microphone access is required to capture audio.</string> + <key>NSCameraUsageDescription</key> + <string>Camera access is required to capture video.</string> <key>NSRequiresAquaSystemAppearance</key> <false /> <key>NSHumanReadableCopyright</key> diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 2f620df8fb..03b51be27f 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -946,18 +946,29 @@ bool GDScriptInstance::set(const StringName &p_name, const Variant &p_value) { { const Map<StringName, GDScript::MemberInfo>::Element *E = script->member_indices.find(p_name); if (E) { - if (E->get().setter) { + const GDScript::MemberInfo *member = &E->get(); + if (member->setter) { const Variant *val = &p_value; Variant::CallError err; - call(E->get().setter, &val, 1, err); + call(member->setter, &val, 1, err); if (err.error == Variant::CallError::CALL_OK) { return true; //function exists, call was successful } } else { - if (!E->get().data_type.is_type(p_value)) { - return false; // Type mismatch + if (!member->data_type.is_type(p_value)) { + // Try conversion + Variant::CallError ce; + const Variant *value = &p_value; + Variant converted = Variant::construct(member->data_type.builtin_type, &value, 1, ce); + if (ce.error == Variant::CallError::CALL_OK) { + members.write[member->index] = converted; + return true; + } else { + return false; + } + } else { + members.write[member->index] = p_value; } - members.write[E->get().index] = p_value; } return true; } diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index dea2225e91..7ce19f5adc 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -1144,7 +1144,7 @@ int GDScriptCompiler::_parse_expression(CodeGen &codegen, const GDScriptParser:: GDScriptDataType assign_type = _gdtype_from_datatype(on->arguments[0]->get_datatype()); - if (assign_type.has_type && !on->arguments[1]->get_datatype().has_type) { + if (assign_type.has_type && !on->datatype.has_type) { // Typed assignment switch (assign_type.kind) { case GDScriptDataType::BUILTIN: { diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 280bc37dc0..97b8dda6d0 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -744,6 +744,14 @@ static bool _guess_expression_type(GDScriptCompletionContext &p_context, const G r_type.type.kind = GDScriptParser::DataType::BUILTIN; r_type.type.builtin_type = Variant::ARRAY; } break; + case GDScriptParser::Node::TYPE_CAST: { + const GDScriptParser::CastNode *cn = static_cast<const GDScriptParser::CastNode *>(p_expression); + GDScriptCompletionIdentifier value; + if (_guess_expression_type(p_context, cn->source_node, r_type)) { + r_type.type = cn->get_datatype(); + found = true; + } + } break; case GDScriptParser::Node::TYPE_OPERATOR: { const GDScriptParser::OperatorNode *op = static_cast<const GDScriptParser::OperatorNode *>(p_expression); switch (op->op) { @@ -1232,6 +1240,9 @@ static bool _guess_identifier_type(GDScriptCompletionContext &p_context, const S c.line = last_assign_line; r_type.assigned_expression = last_assigned_expression; if (_guess_expression_type(c, last_assigned_expression, r_type)) { + if (var_type.has_type) { + r_type.type = var_type; + } return true; } } diff --git a/modules/gdscript/gdscript_function.cpp b/modules/gdscript/gdscript_function.cpp index 0a01321851..4518a5be4b 100644 --- a/modules/gdscript/gdscript_function.cpp +++ b/modules/gdscript/gdscript_function.cpp @@ -764,15 +764,17 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a GET_VARIANT_PTR(dst, 2); GET_VARIANT_PTR(src, 3); -#ifdef DEBUG_ENABLED Variant::Type var_type = (Variant::Type)_code_ptr[ip + 1]; GD_ERR_BREAK(var_type < 0 || var_type >= Variant::VARIANT_MAX); if (src->get_type() != var_type) { +#ifdef DEBUG_ENABLED if (Variant::can_convert_strict(src->get_type(), var_type)) { +#endif // DEBUG_ENABLED Variant::CallError ce; *dst = Variant::construct(var_type, const_cast<const Variant **>(&src), 1, ce); } else { +#ifdef DEBUG_ENABLED err_text = "Trying to assign value of type '" + Variant::get_type_name(src->get_type()) + "' to a variable of type '" + Variant::get_type_name(var_type) + "'."; OPCODE_BREAK; @@ -780,9 +782,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a } else { #endif // DEBUG_ENABLED *dst = *src; -#ifdef DEBUG_ENABLED } -#endif // DEBUG_ENABLED ip += 4; } diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index ef1a282e51..4405393b96 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -8185,7 +8185,9 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) { } #endif // DEBUG_ENABLED + bool type_match = check_types; if (check_types && !_is_type_compatible(lh_type, rh_type)) { + type_match = false; // Try supertype test if (_is_type_compatible(rh_type, lh_type)) { _mark_line_as_unsafe(op->line); @@ -8197,23 +8199,27 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) { op->line); return; } - // Replace assignment with implicit conversion - BuiltInFunctionNode *convert = alloc_node<BuiltInFunctionNode>(); - convert->line = op->line; - convert->function = GDScriptFunctions::TYPE_CONVERT; - - ConstantNode *tgt_type = alloc_node<ConstantNode>(); - tgt_type->line = op->line; - tgt_type->value = (int)lh_type.builtin_type; - - OperatorNode *convert_call = alloc_node<OperatorNode>(); - convert_call->line = op->line; - convert_call->op = OperatorNode::OP_CALL; - convert_call->arguments.push_back(convert); - convert_call->arguments.push_back(op->arguments[1]); - convert_call->arguments.push_back(tgt_type); - - op->arguments.write[1] = convert_call; + if (op->op == OperatorNode::OP_ASSIGN) { + // Replace assignment with implicit conversion + BuiltInFunctionNode *convert = alloc_node<BuiltInFunctionNode>(); + convert->line = op->line; + convert->function = GDScriptFunctions::TYPE_CONVERT; + + ConstantNode *tgt_type = alloc_node<ConstantNode>(); + tgt_type->line = op->line; + tgt_type->value = (int)lh_type.builtin_type; + + OperatorNode *convert_call = alloc_node<OperatorNode>(); + convert_call->line = op->line; + convert_call->op = OperatorNode::OP_CALL; + convert_call->arguments.push_back(convert); + convert_call->arguments.push_back(op->arguments[1]); + convert_call->arguments.push_back(tgt_type); + + op->arguments.write[1] = convert_call; + + type_match = true; // Since we are converting, the type is matching + } #ifdef DEBUG_ENABLED if (lh_type.builtin_type == Variant::INT && rh_type.builtin_type == Variant::REAL) { _add_warning(GDScriptWarning::NARROWING_CONVERSION, op->line); @@ -8226,6 +8232,7 @@ void GDScriptParser::_check_block_types(BlockNode *p_block) { _mark_line_as_unsafe(op->line); } #endif // DEBUG_ENABLED + op->datatype.has_type = type_match; } break; case OperatorNode::OP_CALL: case OperatorNode::OP_PARENT_CALL: { diff --git a/modules/mono/editor/GodotTools/GodotTools.BuildLogger/GodotBuildLogger.cs b/modules/mono/editor/GodotTools/GodotTools.BuildLogger/GodotBuildLogger.cs index a0f6f1ff32..6015cb22b6 100644 --- a/modules/mono/editor/GodotTools/GodotTools.BuildLogger/GodotBuildLogger.cs +++ b/modules/mono/editor/GodotTools/GodotTools.BuildLogger/GodotBuildLogger.cs @@ -18,7 +18,7 @@ namespace GodotTools.BuildLogger if (null == Parameters) throw new LoggerException("Log directory was not set."); - var parameters = Parameters.Split(new[] {';'}); + var parameters = Parameters.Split(new[] { ';' }); string logDir = parameters[0]; diff --git a/modules/mono/editor/GodotTools/GodotTools.BuildLogger/GodotTools.BuildLogger.csproj b/modules/mono/editor/GodotTools/GodotTools.BuildLogger/GodotTools.BuildLogger.csproj index dcfdd83831..1eaa36c1aa 100644 --- a/modules/mono/editor/GodotTools/GodotTools.BuildLogger/GodotTools.BuildLogger.csproj +++ b/modules/mono/editor/GodotTools/GodotTools.BuildLogger/GodotTools.BuildLogger.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <PropertyGroup> diff --git a/modules/mono/editor/GodotTools/GodotTools.Core/GodotTools.Core.csproj b/modules/mono/editor/GodotTools/GodotTools.Core/GodotTools.Core.csproj index 24c7cb1573..1974220f2f 100644 --- a/modules/mono/editor/GodotTools/GodotTools.Core/GodotTools.Core.csproj +++ b/modules/mono/editor/GodotTools/GodotTools.Core/GodotTools.Core.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> diff --git a/modules/mono/editor/GodotTools/GodotTools.Core/StringExtensions.cs b/modules/mono/editor/GodotTools/GodotTools.Core/StringExtensions.cs index 8cd7e76303..b531b6aeee 100644 --- a/modules/mono/editor/GodotTools/GodotTools.Core/StringExtensions.cs +++ b/modules/mono/editor/GodotTools/GodotTools.Core/StringExtensions.cs @@ -26,7 +26,7 @@ namespace GodotTools.Core path = path.Replace('\\', '/'); - string[] parts = path.Split(new[] {'/'}, StringSplitOptions.RemoveEmptyEntries); + string[] parts = path.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); path = string.Join(Path.DirectorySeparatorChar.ToString(), parts).Trim(); @@ -44,7 +44,7 @@ namespace GodotTools.Core public static string CsvEscape(this string value, char delimiter = ',') { - bool hasSpecialChar = value.IndexOfAny(new char[] {'\"', '\n', '\r', delimiter}) != -1; + bool hasSpecialChar = value.IndexOfAny(new char[] { '\"', '\n', '\r', delimiter }) != -1; if (hasSpecialChar) return "\"" + value.Replace("\"", "\"\"") + "\""; @@ -54,8 +54,8 @@ namespace GodotTools.Core public static string ToSafeDirName(this string dirName, bool allowDirSeparator) { - var invalidChars = new List<string> {":", "*", "?", "\"", "<", ">", "|"}; - + var invalidChars = new List<string> { ":", "*", "?", "\"", "<", ">", "|" }; + if (allowDirSeparator) { // Directory separators are allowed, but disallow ".." to avoid going up the filesystem diff --git a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotIdeClient.cs b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotIdeClient.cs index 4f56a8d71b..2bf3b83c75 100644 --- a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotIdeClient.cs +++ b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotIdeClient.cs @@ -106,7 +106,7 @@ namespace GodotTools.IdeConnection try { Logger.LogInfo("Connecting to Godot Ide Server"); - + tcpClient.Connect(IPAddress.Loopback, GodotIdeMetadata.Port); Logger.LogInfo("Connection open with Godot Ide Server"); @@ -130,7 +130,7 @@ namespace GodotTools.IdeConnection public void Start() { Logger.LogInfo("Starting Godot Ide Client"); - + fsWatcher.Changed += OnMetaFileChanged; fsWatcher.Deleted += OnMetaFileDeleted; fsWatcher.EnableRaisingEvents = true; diff --git a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotIdeConnection.cs b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotIdeConnection.cs index e7e81f175e..6441be8d6e 100644 --- a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotIdeConnection.cs +++ b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotIdeConnection.cs @@ -149,7 +149,7 @@ namespace GodotTools.IdeConnection public bool WriteMessage(Message message) { Logger.LogDebug($"Sending message {message}"); - + var messageComposer = new MessageComposer(); messageComposer.AddArgument(message.Id); @@ -201,7 +201,7 @@ namespace GodotTools.IdeConnection clientReader?.Dispose(); clientWriter?.Dispose(); - ((IDisposable) tcpClient)?.Dispose(); + ((IDisposable)tcpClient)?.Dispose(); } } } diff --git a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotTools.IdeConnection.csproj b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotTools.IdeConnection.csproj index 94e525715b..427a26508f 100644 --- a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotTools.IdeConnection.csproj +++ b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/GodotTools.IdeConnection.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <PropertyGroup> diff --git a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/MessageComposer.cs b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/MessageComposer.cs index 9e4cd6ec1a..30ffe7a06e 100644 --- a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/MessageComposer.cs +++ b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/MessageComposer.cs @@ -22,14 +22,14 @@ namespace GodotTools.IdeConnection if (quoted) { stringBuilder.Append('"'); - + foreach (char @char in argument) { if (CharsToEscape.Contains(@char)) stringBuilder.Append('\\'); stringBuilder.Append(@char); } - + stringBuilder.Append('"'); } else diff --git a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/MessageParser.cs b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/MessageParser.cs index ed691e481f..4365d69989 100644 --- a/modules/mono/editor/GodotTools/GodotTools.IdeConnection/MessageParser.cs +++ b/modules/mono/editor/GodotTools/GodotTools.IdeConnection/MessageParser.cs @@ -37,7 +37,7 @@ namespace GodotTools.IdeConnection while (i < messageLine.Length) { @char = messageLine[i]; - + if (quoted && @char == '"') { i++; @@ -60,10 +60,10 @@ namespace GodotTools.IdeConnection { stringBuilder.Append(@char); } - + i++; } - + arguments.Add(stringBuilder.ToString()); stringBuilder.Clear(); diff --git a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs index 4f21871f1a..b40d985d51 100644 --- a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs +++ b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/ProjectGenerator.cs @@ -26,8 +26,8 @@ namespace GodotTools.ProjectEditor mainGroup.SetProperty("BaseIntermediateOutputPath", "obj"); GenAssemblyInfoFile(root, dir, CoreApiProjectName, - new[] {"[assembly: InternalsVisibleTo(\"" + EditorApiProjectName + "\")]"}, - new[] {"System.Runtime.CompilerServices"}); + new[] { "[assembly: InternalsVisibleTo(\"" + EditorApiProjectName + "\")]" }, + new[] { "System.Runtime.CompilerServices" }); foreach (var item in compileItems) { diff --git a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/packages.config b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/packages.config index 13915000e4..2db030f9d8 100644 --- a/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/packages.config +++ b/modules/mono/editor/GodotTools/GodotTools.ProjectEditor/packages.config @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <packages> <package id="DotNet.Glob" version="2.1.1" targetFramework="net45" /> -</packages>
\ No newline at end of file +</packages> diff --git a/modules/mono/editor/GodotTools/GodotTools/BottomPanel.cs b/modules/mono/editor/GodotTools/GodotTools/BottomPanel.cs index 44813f962c..4c76d2abf1 100644 --- a/modules/mono/editor/GodotTools/GodotTools/BottomPanel.cs +++ b/modules/mono/editor/GodotTools/GodotTools/BottomPanel.cs @@ -34,7 +34,7 @@ namespace GodotTools for (int i = 0; i < buildTabs.GetChildCount(); i++) { - var tab = (BuildTab) buildTabs.GetChild(i); + var tab = (BuildTab)buildTabs.GetChild(i); if (tab == null) continue; @@ -120,7 +120,7 @@ namespace GodotTools if (currentTab < 0 || currentTab >= buildTabs.GetTabCount()) throw new InvalidOperationException("No tab selected"); - var buildTab = (BuildTab) buildTabs.GetChild(currentTab); + var buildTab = (BuildTab)buildTabs.GetChild(currentTab); buildTab.WarningsVisible = pressed; buildTab.UpdateIssuesList(); } @@ -132,7 +132,7 @@ namespace GodotTools if (currentTab < 0 || currentTab >= buildTabs.GetTabCount()) throw new InvalidOperationException("No tab selected"); - var buildTab = (BuildTab) buildTabs.GetChild(currentTab); + var buildTab = (BuildTab)buildTabs.GetChild(currentTab); buildTab.ErrorsVisible = pressed; buildTab.UpdateIssuesList(); } @@ -193,7 +193,7 @@ namespace GodotTools int selectedItem = selectedItems[0]; - var buildTab = (BuildTab) buildTabs.GetTabControl(selectedItem); + var buildTab = (BuildTab)buildTabs.GetTabControl(selectedItem); OS.ShellOpen(Path.Combine(buildTab.BuildInfo.LogsDirPath, BuildManager.MsBuildLogFileName)); } @@ -249,14 +249,14 @@ namespace GodotTools var editorBaseControl = editorInterface.GetBaseControl(); - SizeFlagsVertical = (int) SizeFlags.ExpandFill; + SizeFlagsVertical = (int)SizeFlags.ExpandFill; SetAnchorsAndMarginsPreset(LayoutPreset.Wide); panelTabs = new TabContainer { TabAlign = TabContainer.TabAlignEnum.Left, RectMinSize = new Vector2(0, 228) * EditorScale, - SizeFlagsVertical = (int) SizeFlags.ExpandFill + SizeFlagsVertical = (int)SizeFlags.ExpandFill }; panelTabs.AddStyleboxOverride("panel", editorBaseControl.GetStylebox("DebuggerPanel", "EditorStyles")); panelTabs.AddStyleboxOverride("tab_fg", editorBaseControl.GetStylebox("DebuggerTabFG", "EditorStyles")); @@ -268,11 +268,11 @@ namespace GodotTools panelBuildsTab = new VBoxContainer { Name = "Builds".TTR(), - SizeFlagsHorizontal = (int) SizeFlags.ExpandFill + SizeFlagsHorizontal = (int)SizeFlags.ExpandFill }; panelTabs.AddChild(panelBuildsTab); - var toolBarHBox = new HBoxContainer {SizeFlagsHorizontal = (int) SizeFlags.ExpandFill}; + var toolBarHBox = new HBoxContainer { SizeFlagsHorizontal = (int)SizeFlags.ExpandFill }; panelBuildsTab.AddChild(toolBarHBox); var buildProjectBtn = new Button @@ -320,12 +320,12 @@ namespace GodotTools var hsc = new HSplitContainer { - SizeFlagsHorizontal = (int) SizeFlags.ExpandFill, - SizeFlagsVertical = (int) SizeFlags.ExpandFill + SizeFlagsHorizontal = (int)SizeFlags.ExpandFill, + SizeFlagsVertical = (int)SizeFlags.ExpandFill }; panelBuildsTab.AddChild(hsc); - buildTabsList = new ItemList {SizeFlagsHorizontal = (int) SizeFlags.ExpandFill}; + buildTabsList = new ItemList { SizeFlagsHorizontal = (int)SizeFlags.ExpandFill }; buildTabsList.Connect("item_selected", this, nameof(_BuildTabsItemSelected)); buildTabsList.Connect("nothing_selected", this, nameof(_BuildTabsNothingSelected)); hsc.AddChild(buildTabsList); @@ -333,7 +333,7 @@ namespace GodotTools buildTabs = new TabContainer { TabAlign = TabContainer.TabAlignEnum.Left, - SizeFlagsHorizontal = (int) SizeFlags.ExpandFill, + SizeFlagsHorizontal = (int)SizeFlags.ExpandFill, TabsVisible = false }; hsc.AddChild(buildTabs); diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs b/modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs index da90c960e5..43c96d2e30 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Build/BuildSystem.cs @@ -46,7 +46,7 @@ namespace GodotTools.Build { if (OS.IsWindows) { - return (BuildManager.BuildTool) EditorSettings.GetSetting("mono/builds/build_tool") + return (BuildManager.BuildTool)EditorSettings.GetSetting("mono/builds/build_tool") == BuildManager.BuildTool.MsBuildMono; } @@ -55,7 +55,7 @@ namespace GodotTools.Build } private static bool PrintBuildOutput => - (bool) EditorSettings.GetSetting("mono/builds/print_build_output"); + (bool)EditorSettings.GetSetting("mono/builds/print_build_output"); private static Process LaunchBuild(string solution, string config, string loggerOutputDir, IEnumerable<string> customProperties = null) { @@ -90,7 +90,7 @@ namespace GodotTools.Build // Needed when running from Developer Command Prompt for VS RemovePlatformVariable(startInfo.EnvironmentVariables); - var process = new Process {StartInfo = startInfo}; + var process = new Process { StartInfo = startInfo }; process.Start(); diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/MsBuildFinder.cs b/modules/mono/editor/GodotTools/GodotTools/Build/MsBuildFinder.cs index ad8a6516ab..c3db52aa9e 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Build/MsBuildFinder.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Build/MsBuildFinder.cs @@ -19,7 +19,7 @@ namespace GodotTools.Build public static string FindMsBuild() { var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); - var buildTool = (BuildManager.BuildTool) editorSettings.GetSetting("mono/builds/build_tool"); + var buildTool = (BuildManager.BuildTool)editorSettings.GetSetting("mono/builds/build_tool"); if (OS.IsWindows) { @@ -136,11 +136,11 @@ namespace GodotTools.Build string vsWherePath = Environment.GetEnvironmentVariable(Internal.GodotIs32Bits() ? "ProgramFiles" : "ProgramFiles(x86)"); vsWherePath += "\\Microsoft Visual Studio\\Installer\\vswhere.exe"; - var vsWhereArgs = new[] {"-latest", "-products", "*", "-requires", "Microsoft.Component.MSBuild"}; + var vsWhereArgs = new[] { "-latest", "-products", "*", "-requires", "Microsoft.Component.MSBuild" }; var outputArray = new Godot.Collections.Array<string>(); int exitCode = Godot.OS.Execute(vsWherePath, vsWhereArgs, - blocking: true, output: (Godot.Collections.Array) outputArray); + blocking: true, output: (Godot.Collections.Array)outputArray); if (exitCode != 0) return string.Empty; diff --git a/modules/mono/editor/GodotTools/GodotTools/BuildManager.cs b/modules/mono/editor/GodotTools/GodotTools/BuildManager.cs index 217bf5c144..fa6bf4dafd 100644 --- a/modules/mono/editor/GodotTools/GodotTools/BuildManager.cs +++ b/modules/mono/editor/GodotTools/GodotTools/BuildManager.cs @@ -172,7 +172,7 @@ namespace GodotTools } var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); - var buildTool = (BuildTool) editorSettings.GetSetting("mono/builds/build_tool"); + var buildTool = (BuildTool)editorSettings.GetSetting("mono/builds/build_tool"); using (var pr = new EditorProgress("mono_project_debug_build", "Building project solution...", 1)) { diff --git a/modules/mono/editor/GodotTools/GodotTools/BuildTab.cs b/modules/mono/editor/GodotTools/GodotTools/BuildTab.cs index 807a20d9a1..727581daab 100644 --- a/modules/mono/editor/GodotTools/GodotTools/BuildTab.cs +++ b/modules/mono/editor/GodotTools/GodotTools/BuildTab.cs @@ -113,7 +113,7 @@ namespace GodotTools throw new IndexOutOfRangeException("Item list index out of range"); // Get correct issue idx from issue list - int issueIndex = (int) issuesList.GetItemMetadata(idx); + int issueIndex = (int)issuesList.GetItemMetadata(idx); if (idx < 0 || idx >= issues.Count) throw new IndexOutOfRangeException("Issue index out of range"); @@ -134,7 +134,7 @@ namespace GodotTools if (file.StartsWith("res://")) { - var script = (Script) ResourceLoader.Load(file, typeHint: Internal.CSharpLanguageType); + var script = (Script)ResourceLoader.Load(file, typeHint: Internal.CSharpLanguageType); if (script != null && Internal.ScriptEditorEdit(script, issue.Line, issue.Column)) Internal.EditorNodeShowScriptScreen(); @@ -220,7 +220,7 @@ namespace GodotTools issuesList.Clear(); - var issue = new BuildIssue {Message = cause, Warning = false}; + var issue = new BuildIssue { Message = cause, Warning = false }; ErrorCount += 1; issues.Add(issue); @@ -250,7 +250,7 @@ namespace GodotTools { base._Ready(); - issuesList = new ItemList {SizeFlagsVertical = (int) SizeFlags.ExpandFill}; + issuesList = new ItemList { SizeFlagsVertical = (int)SizeFlags.ExpandFill }; issuesList.Connect("item_activated", this, nameof(_IssueActivated)); AddChild(issuesList); } diff --git a/modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs b/modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs index c021a9051e..174509dc5b 100644 --- a/modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs +++ b/modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs @@ -26,7 +26,7 @@ namespace GodotTools public static void AddItem(string projectPath, string itemType, string include) { - if (!(bool) GlobalDef("mono/project/auto_update_project", true)) + if (!(bool)GlobalDef("mono/project/auto_update_project", true)) return; ProjectUtils.AddItemToProjectChecked(projectPath, itemType, include); @@ -49,7 +49,7 @@ namespace GodotTools private static ulong ConvertToTimestamp(this DateTime value) { TimeSpan elapsedTime = value - Epoch; - return (ulong) elapsedTime.TotalSeconds; + return (ulong)elapsedTime.TotalSeconds; } public static void GenerateScriptsMetadata(string projectPath, string outputPath) @@ -68,7 +68,7 @@ namespace GodotTools if (oldDict.TryGetValue(projectIncludeFile, out var oldFileVar)) { - var oldFileDict = (Dictionary) oldFileVar; + var oldFileDict = (Dictionary)oldFileVar; if (ulong.TryParse(oldFileDict["modified_time"] as string, out ulong storedModifiedTime)) { @@ -108,7 +108,7 @@ namespace GodotTools if (classDict.Count == 0) continue; // Not found - newDict[projectIncludeFile] = new Dictionary {["modified_time"] = $"{modifiedTime}", ["class"] = classDict}; + newDict[projectIncludeFile] = new Dictionary { ["modified_time"] = $"{modifiedTime}", ["class"] = classDict }; } if (newDict.Count > 0) diff --git a/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs b/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs index c7e8ea511a..b17a3f4491 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs @@ -54,7 +54,7 @@ namespace GodotTools.Export // TODO What if the source file is not part of the game's C# project - bool includeScriptsContent = (bool) ProjectSettings.GetSetting("mono/export/include_scripts_content"); + bool includeScriptsContent = (bool)ProjectSettings.GetSetting("mono/export/include_scripts_content"); if (!includeScriptsContent) { @@ -114,7 +114,7 @@ namespace GodotTools.Export var dependencies = new Godot.Collections.Dictionary<string, string>(); - var projectDllName = (string) ProjectSettings.GetSetting("application/config/name"); + var projectDllName = (string)ProjectSettings.GetSetting("application/config/name"); if (projectDllName.Empty()) { projectDllName = "UnnamedProject"; @@ -147,7 +147,7 @@ namespace GodotTools.Export string apiConfig = isDebug ? "Debug" : "Release"; string resAssembliesDir = Path.Combine(GodotSharpDirs.ResAssembliesBaseDir, apiConfig); - bool assembliesInsidePck = (bool) ProjectSettings.GetSetting("mono/export/export_assemblies_inside_pck") || outputDataDir == null; + bool assembliesInsidePck = (bool)ProjectSettings.GetSetting("mono/export/export_assemblies_inside_pck") || outputDataDir == null; if (!assembliesInsidePck) { @@ -174,7 +174,7 @@ namespace GodotTools.Export // AOT - if ((bool) ProjectSettings.GetSetting("mono/export/aot/enabled")) + if ((bool)ProjectSettings.GetSetting("mono/export/aot/enabled")) { AotCompileDependencies(features, platform, isDebug, outputDir, outputDataDir, dependencies); } @@ -336,7 +336,7 @@ namespace GodotTools.Export AotCompileAssembly(platform, isDebug, data, assemblyPath, outputFilePathForThisAbi); - AddSharedObject(outputFilePathForThisAbi, tags: new[] {abi}); + AddSharedObject(outputFilePathForThisAbi, tags: new[] { abi }); } } else @@ -377,7 +377,7 @@ namespace GodotTools.Export string compilerCommand = Path.Combine(monoCrossBin, $"{toolPrefix}{monoExeName}{exeExt}"); - bool fullAot = (bool) ProjectSettings.GetSetting("mono/export/aot/full_aot"); + bool fullAot = (bool)ProjectSettings.GetSetting("mono/export/aot/full_aot"); string EscapeOption(string option) => option.Contains(',') ? $"\"{option}\"" : option; string OptionsToString(IEnumerable<string> options) => string.Join(",", options.Select(EscapeOption)); @@ -394,7 +394,7 @@ namespace GodotTools.Export { string abi = data["abi"]; - string androidToolchain = (string) ProjectSettings.GetSetting("mono/export/aot/android_toolchain_path"); + string androidToolchain = (string)ProjectSettings.GetSetting("mono/export/aot/android_toolchain_path"); if (string.IsNullOrEmpty(androidToolchain)) { @@ -419,13 +419,13 @@ namespace GodotTools.Export aotOptions.Add("tool-prefix=" + Path.Combine(androidToolchain, "bin", androidToolPrefixes[abi])); string triple = GetAndroidTriple(abi); - aotOptions.Add ($"mtriple={triple}"); + aotOptions.Add($"mtriple={triple}"); } aotOptions.Add($"outfile={outputFilePath}"); - var extraAotOptions = (string[]) ProjectSettings.GetSetting("mono/export/aot/extra_aot_options"); - var extraOptimizerOptions = (string[]) ProjectSettings.GetSetting("mono/export/aot/extra_optimizer_options"); + var extraAotOptions = (string[])ProjectSettings.GetSetting("mono/export/aot/extra_aot_options"); + var extraOptimizerOptions = (string[])ProjectSettings.GetSetting("mono/export/aot/extra_optimizer_options"); if (extraAotOptions.Length > 0) aotOptions.AddRange(extraAotOptions); @@ -575,7 +575,7 @@ namespace GodotTools.Export private static bool PlatformHasTemplateDir(string platform) { // OSX export templates are contained in a zip, so we place our custom template inside it and let Godot do the rest. - return !new[] {OS.Platforms.OSX, OS.Platforms.Android, OS.Platforms.HTML5}.Contains(platform); + return !new[] { OS.Platforms.OSX, OS.Platforms.Android, OS.Platforms.HTML5 }.Contains(platform); } private static string DeterminePlatformFromFeatures(IEnumerable<string> features) @@ -623,7 +623,7 @@ namespace GodotTools.Export /// </summary> private static bool PlatformRequiresCustomBcl(string platform) { - if (new[] {OS.Platforms.Android, OS.Platforms.HTML5}.Contains(platform)) + if (new[] { OS.Platforms.Android, OS.Platforms.HTML5 }.Contains(platform)) return true; // The 'net_4_x' BCL is not compatible between Windows and the other platforms. @@ -663,7 +663,7 @@ namespace GodotTools.Export { get { - var appName = (string) ProjectSettings.GetSetting("application/config/name"); + var appName = (string)ProjectSettings.GetSetting("application/config/name"); string appNameSafe = appName.ToSafeDirName(allowDirSeparator: false); return $"data_{appNameSafe}"; } diff --git a/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs b/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs index 660971d912..147bc95bb8 100644 --- a/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs +++ b/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs @@ -44,7 +44,7 @@ namespace GodotTools string resourceDir = ProjectSettings.GlobalizePath("res://"); string path = resourceDir; - string name = (string) ProjectSettings.GetSetting("application/config/name"); + string name = (string)ProjectSettings.GetSetting("application/config/name"); if (name.Empty()) name = "UnnamedProject"; @@ -61,7 +61,7 @@ namespace GodotTools { Guid = guid, PathRelativeToSolution = name + ".csproj", - Configs = new List<string> {"Debug", "Release", "Tools"} + Configs = new List<string> { "Debug", "Release", "Tools" } }; solution.AddNewProject(name, projectInfo); @@ -110,20 +110,20 @@ namespace GodotTools private void _RemoveCreateSlnMenuOption() { - menuPopup.RemoveItem(menuPopup.GetItemIndex((int) MenuOptions.CreateSln)); + menuPopup.RemoveItem(menuPopup.GetItemIndex((int)MenuOptions.CreateSln)); bottomPanelBtn.Show(); } private void _ShowAboutDialog() { - bool showOnStart = (bool) editorSettings.GetSetting("mono/editor/show_info_on_start"); + bool showOnStart = (bool)editorSettings.GetSetting("mono/editor/show_info_on_start"); aboutDialogCheckBox.Pressed = showOnStart; aboutDialog.PopupCenteredMinsize(); } private void _ToggleAboutDialogOnStart(bool enabled) { - bool showOnStart = (bool) editorSettings.GetSetting("mono/editor/show_info_on_start"); + bool showOnStart = (bool)editorSettings.GetSetting("mono/editor/show_info_on_start"); if (showOnStart != enabled) editorSettings.SetSetting("mono/editor/show_info_on_start", enabled); } @@ -160,7 +160,7 @@ namespace GodotTools if (what == NotificationReady) { - bool showInfoDialog = (bool) editorSettings.GetSetting("mono/editor/show_info_on_start"); + bool showInfoDialog = (bool)editorSettings.GetSetting("mono/editor/show_info_on_start"); if (showInfoDialog) { aboutDialog.PopupExclusive = true; @@ -194,7 +194,7 @@ namespace GodotTools [UsedImplicitly] public Error OpenInExternalEditor(Script script, int line, int col) { - var editor = (ExternalEditorId) editorSettings.GetSetting("mono/editor/external_editor"); + var editor = (ExternalEditorId)editorSettings.GetSetting("mono/editor/external_editor"); switch (editor) { @@ -318,7 +318,7 @@ namespace GodotTools [UsedImplicitly] public bool OverridesExternalEditor() { - return (ExternalEditorId) editorSettings.GetSetting("mono/editor/external_editor") != ExternalEditorId.None; + return (ExternalEditorId)editorSettings.GetSetting("mono/editor/external_editor") != ExternalEditorId.None; } public override bool Build() @@ -346,7 +346,7 @@ namespace GodotTools bottomPanelBtn = AddControlToBottomPanel(BottomPanel, "Mono".TTR()); - AddChild(new HotReloadAssemblyWatcher {Name = "HotReloadAssemblyWatcher"}); + AddChild(new HotReloadAssemblyWatcher { Name = "HotReloadAssemblyWatcher" }); menuPopup = new PopupMenu(); menuPopup.Hide(); @@ -356,7 +356,7 @@ namespace GodotTools // TODO: Remove or edit this info dialog once Mono support is no longer in alpha { - menuPopup.AddItem("About C# support".TTR(), (int) MenuOptions.AboutCSharp); + menuPopup.AddItem("About C# support".TTR(), (int)MenuOptions.AboutCSharp); aboutDialog = new AcceptDialog(); editorBaseControl.AddChild(aboutDialog); aboutDialog.WindowTitle = "Important: C# support is not feature-complete"; @@ -379,7 +379,7 @@ namespace GodotTools var aboutLabel = new Label(); aboutHBox.AddChild(aboutLabel); aboutLabel.RectMinSize = new Vector2(600, 150) * EditorScale; - aboutLabel.SizeFlagsVertical = (int) Control.SizeFlags.ExpandFill; + aboutLabel.SizeFlagsVertical = (int)Control.SizeFlags.ExpandFill; aboutLabel.Autowrap = true; aboutLabel.Text = "C# support in Godot Engine is in late alpha stage and, while already usable, " + @@ -394,7 +394,7 @@ namespace GodotTools EditorDef("mono/editor/show_info_on_start", true); // CheckBox in main container - aboutDialogCheckBox = new CheckBox {Text = "Show this warning when starting the editor"}; + aboutDialogCheckBox = new CheckBox { Text = "Show this warning when starting the editor" }; aboutDialogCheckBox.Connect("toggled", this, nameof(_ToggleAboutDialogOnStart)); aboutVBox.AddChild(aboutDialogCheckBox); } @@ -407,7 +407,7 @@ namespace GodotTools else { bottomPanelBtn.Hide(); - menuPopup.AddItem("Create C# solution".TTR(), (int) MenuOptions.CreateSln); + menuPopup.AddItem("Create C# solution".TTR(), (int)MenuOptions.CreateSln); } menuPopup.Connect("id_pressed", this, nameof(_MenuOptionPressed)); @@ -428,22 +428,22 @@ namespace GodotTools if (OS.IsWindows) { - settingsHintStr += $",MonoDevelop:{(int) ExternalEditorId.MonoDevelop}" + - $",Visual Studio Code:{(int) ExternalEditorId.VsCode}" + - $",JetBrains Rider:{(int) ExternalEditorId.Rider}"; + settingsHintStr += $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" + + $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" + + $",JetBrains Rider:{(int)ExternalEditorId.Rider}"; } else if (OS.IsOSX) { - settingsHintStr += $",Visual Studio:{(int) ExternalEditorId.VisualStudioForMac}" + - $",MonoDevelop:{(int) ExternalEditorId.MonoDevelop}" + - $",Visual Studio Code:{(int) ExternalEditorId.VsCode}" + - $",JetBrains Rider:{(int) ExternalEditorId.Rider}"; + settingsHintStr += $",Visual Studio:{(int)ExternalEditorId.VisualStudioForMac}" + + $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" + + $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" + + $",JetBrains Rider:{(int)ExternalEditorId.Rider}"; } else if (OS.IsUnixLike()) { - settingsHintStr += $",MonoDevelop:{(int) ExternalEditorId.MonoDevelop}" + - $",Visual Studio Code:{(int) ExternalEditorId.VsCode}" + - $",JetBrains Rider:{(int) ExternalEditorId.Rider}"; + settingsHintStr += $",MonoDevelop:{(int)ExternalEditorId.MonoDevelop}" + + $",Visual Studio Code:{(int)ExternalEditorId.VsCode}" + + $",JetBrains Rider:{(int)ExternalEditorId.Rider}"; } editorSettings.AddPropertyInfo(new Godot.Collections.Dictionary diff --git a/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj b/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj index be2b70529e..dbd774a66a 100644 --- a/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj +++ b/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> diff --git a/modules/mono/editor/GodotTools/GodotTools/HotReloadAssemblyWatcher.cs b/modules/mono/editor/GodotTools/GodotTools/HotReloadAssemblyWatcher.cs index 0f6f5ffadc..0ed567afd1 100644 --- a/modules/mono/editor/GodotTools/GodotTools/HotReloadAssemblyWatcher.cs +++ b/modules/mono/editor/GodotTools/GodotTools/HotReloadAssemblyWatcher.cs @@ -38,7 +38,7 @@ namespace GodotTools watchTimer = new Timer { OneShot = false, - WaitTime = (float) EditorDef("mono/assembly_watch_interval_sec", 0.5) + WaitTime = (float)EditorDef("mono/assembly_watch_interval_sec", 0.5) }; watchTimer.Connect("timeout", this, nameof(TimerTimeout)); AddChild(watchTimer); diff --git a/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs b/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs index 3213de0127..54f0ffab96 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs @@ -64,7 +64,7 @@ namespace GodotTools.Ides private void LaunchIde() { - var editor = (ExternalEditorId) GodotSharpEditor.Instance.GetEditorInterface() + var editor = (ExternalEditorId)GodotSharpEditor.Instance.GetEditorInterface() .GetEditorSettings().GetSetting("mono/editor/external_editor"); switch (editor) diff --git a/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeServer.cs b/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeServer.cs index 309b917c71..72676a8b24 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeServer.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeServer.cs @@ -45,7 +45,7 @@ namespace GodotTools.Ides listener = new TcpListener(new IPEndPoint(IPAddress.Loopback, port: 0)); listener.Start(); - int port = ((IPEndPoint) listener.Server.LocalEndPoint).Port; + int port = ((IPEndPoint)listener.Server.LocalEndPoint).Port; using (var metaFileWriter = new StreamWriter(metaFile, Encoding.UTF8)) { metaFileWriter.WriteLine(port); @@ -57,7 +57,7 @@ namespace GodotTools.Ides public void StartServer() { - var serverThread = new Thread(RunServerThread) {Name = "Godot Ide Connection Server"}; + var serverThread = new Thread(RunServerThread) { Name = "Godot Ide Connection Server" }; serverThread.Start(); } diff --git a/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/.editorconfig b/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/.editorconfig deleted file mode 100644 index aca19790ca..0000000000 --- a/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/.editorconfig +++ /dev/null @@ -1,6 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf
\ No newline at end of file diff --git a/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathLocator.cs b/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathLocator.cs index 901ade71e3..b752535dcb 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathLocator.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathLocator.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -14,403 +14,403 @@ using OS = GodotTools.Utils.OS; namespace GodotTools.Ides.Rider { - /// <summary> - /// This code is a modified version of the JetBrains resharper-unity plugin listed under Apache License 2.0 license: - /// https://github.com/JetBrains/resharper-unity/blob/master/unity/JetBrains.Rider.Unity.Editor/EditorPlugin/RiderPathLocator.cs - /// </summary> - public static class RiderPathLocator - { - public static RiderInfo[] GetAllRiderPaths() + /// <summary> + /// This code is a modified version of the JetBrains resharper-unity plugin listed under Apache License 2.0 license: + /// https://github.com/JetBrains/resharper-unity/blob/master/unity/JetBrains.Rider.Unity.Editor/EditorPlugin/RiderPathLocator.cs + /// </summary> + public static class RiderPathLocator { - try - { - if (OS.IsWindows) + public static RiderInfo[] GetAllRiderPaths() { - return CollectRiderInfosWindows(); - } - if (OS.IsOSX) - { - return CollectRiderInfosMac(); - } - if (OS.IsUnixLike()) - { - return CollectAllRiderPathsLinux(); - } - throw new Exception("Unexpected OS."); - } - catch (Exception e) - { - GD.PushWarning(e.Message); - } - - return new RiderInfo[0]; - } + try + { + if (OS.IsWindows) + { + return CollectRiderInfosWindows(); + } + if (OS.IsOSX) + { + return CollectRiderInfosMac(); + } + if (OS.IsUnixLike()) + { + return CollectAllRiderPathsLinux(); + } + throw new Exception("Unexpected OS."); + } + catch (Exception e) + { + GD.PushWarning(e.Message); + } - private static RiderInfo[] CollectAllRiderPathsLinux() - { - var installInfos = new List<RiderInfo>(); - var home = Environment.GetEnvironmentVariable("HOME"); - if (!string.IsNullOrEmpty(home)) - { - var toolboxRiderRootPath = GetToolboxBaseDir(); - installInfos.AddRange(CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider.sh", false) - .Select(a => new RiderInfo(a, true)).ToList()); - - //$Home/.local/share/applications/jetbrains-rider.desktop - var shortcut = new FileInfo(Path.Combine(home, @".local/share/applications/jetbrains-rider.desktop")); - - if (shortcut.Exists) - { - var lines = File.ReadAllLines(shortcut.FullName); - foreach (var line in lines) - { - if (!line.StartsWith("Exec=\"")) - continue; - var path = line.Split('"').Where((item, index) => index == 1).SingleOrDefault(); - if (string.IsNullOrEmpty(path)) - continue; - - if (installInfos.Any(a => a.Path == path)) // avoid adding similar build as from toolbox - continue; - installInfos.Add(new RiderInfo(path, false)); - } + return new RiderInfo[0]; } - } - - // snap install - var snapInstallPath = "/snap/rider/current/bin/rider.sh"; - if (new FileInfo(snapInstallPath).Exists) - installInfos.Add(new RiderInfo(snapInstallPath, false)); - - return installInfos.ToArray(); - } - private static RiderInfo[] CollectRiderInfosMac() - { - var installInfos = new List<RiderInfo>(); - // "/Applications/*Rider*.app" - var folder = new DirectoryInfo("/Applications"); - if (folder.Exists) - { - installInfos.AddRange(folder.GetDirectories("*Rider*.app") - .Select(a => new RiderInfo(a.FullName, false)) - .ToList()); - } - - // /Users/user/Library/Application Support/JetBrains/Toolbox/apps/Rider/ch-1/181.3870.267/Rider EAP.app - var toolboxRiderRootPath = GetToolboxBaseDir(); - var paths = CollectPathsFromToolbox(toolboxRiderRootPath, "", "Rider*.app", true) - .Select(a => new RiderInfo(a, true)); - installInfos.AddRange(paths); - - return installInfos.ToArray(); - } + private static RiderInfo[] CollectAllRiderPathsLinux() + { + var installInfos = new List<RiderInfo>(); + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + var toolboxRiderRootPath = GetToolboxBaseDir(); + installInfos.AddRange(CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider.sh", false) + .Select(a => new RiderInfo(a, true)).ToList()); + + //$Home/.local/share/applications/jetbrains-rider.desktop + var shortcut = new FileInfo(Path.Combine(home, @".local/share/applications/jetbrains-rider.desktop")); + + if (shortcut.Exists) + { + var lines = File.ReadAllLines(shortcut.FullName); + foreach (var line in lines) + { + if (!line.StartsWith("Exec=\"")) + continue; + var path = line.Split('"').Where((item, index) => index == 1).SingleOrDefault(); + if (string.IsNullOrEmpty(path)) + continue; + + if (installInfos.Any(a => a.Path == path)) // avoid adding similar build as from toolbox + continue; + installInfos.Add(new RiderInfo(path, false)); + } + } + } - private static RiderInfo[] CollectRiderInfosWindows() - { - var installInfos = new List<RiderInfo>(); - var toolboxRiderRootPath = GetToolboxBaseDir(); - var installPathsToolbox = CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider64.exe", false).ToList(); - installInfos.AddRange(installPathsToolbox.Select(a => new RiderInfo(a, true)).ToList()); - - var installPaths = new List<string>(); - const string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; - CollectPathsFromRegistry(registryKey, installPaths); - const string wowRegistryKey = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"; - CollectPathsFromRegistry(wowRegistryKey, installPaths); - - installInfos.AddRange(installPaths.Select(a => new RiderInfo(a, false)).ToList()); - - return installInfos.ToArray(); - } + // snap install + var snapInstallPath = "/snap/rider/current/bin/rider.sh"; + if (new FileInfo(snapInstallPath).Exists) + installInfos.Add(new RiderInfo(snapInstallPath, false)); - private static string GetToolboxBaseDir() - { - if (OS.IsWindows) - { - var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - return Path.Combine(localAppData, @"JetBrains\Toolbox\apps\Rider"); - } - - if (OS.IsOSX) - { - var home = Environment.GetEnvironmentVariable("HOME"); - if (!string.IsNullOrEmpty(home)) - { - return Path.Combine(home, @"Library/Application Support/JetBrains/Toolbox/apps/Rider"); + return installInfos.ToArray(); } - } - if (OS.IsUnixLike()) - { - var home = Environment.GetEnvironmentVariable("HOME"); - if (!string.IsNullOrEmpty(home)) + private static RiderInfo[] CollectRiderInfosMac() { - return Path.Combine(home, @".local/share/JetBrains/Toolbox/apps/Rider"); + var installInfos = new List<RiderInfo>(); + // "/Applications/*Rider*.app" + var folder = new DirectoryInfo("/Applications"); + if (folder.Exists) + { + installInfos.AddRange(folder.GetDirectories("*Rider*.app") + .Select(a => new RiderInfo(a.FullName, false)) + .ToList()); + } + + // /Users/user/Library/Application Support/JetBrains/Toolbox/apps/Rider/ch-1/181.3870.267/Rider EAP.app + var toolboxRiderRootPath = GetToolboxBaseDir(); + var paths = CollectPathsFromToolbox(toolboxRiderRootPath, "", "Rider*.app", true) + .Select(a => new RiderInfo(a, true)); + installInfos.AddRange(paths); + + return installInfos.ToArray(); } - } - throw new Exception("Unexpected OS."); - } - - internal static ProductInfo GetBuildVersion(string path) - { - var buildTxtFileInfo = new FileInfo(Path.Combine(path, GetRelativePathToBuildTxt())); - var dir = buildTxtFileInfo.DirectoryName; - if (!Directory.Exists(dir)) - return null; - var buildVersionFile = new FileInfo(Path.Combine(dir, "product-info.json")); - if (!buildVersionFile.Exists) - return null; - var json = File.ReadAllText(buildVersionFile.FullName); - return ProductInfo.GetProductInfo(json); - } - - internal static Version GetBuildNumber(string path) - { - var file = new FileInfo(Path.Combine(path, GetRelativePathToBuildTxt())); - if (!file.Exists) - return null; - var text = File.ReadAllText(file.FullName); - if (text.Length <= 3) - return null; - - var versionText = text.Substring(3); - return Version.TryParse(versionText, out var v) ? v : null; - } + private static RiderInfo[] CollectRiderInfosWindows() + { + var installInfos = new List<RiderInfo>(); + var toolboxRiderRootPath = GetToolboxBaseDir(); + var installPathsToolbox = CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider64.exe", false).ToList(); + installInfos.AddRange(installPathsToolbox.Select(a => new RiderInfo(a, true)).ToList()); - internal static bool IsToolbox(string path) - { - return path.StartsWith(GetToolboxBaseDir()); - } + var installPaths = new List<string>(); + const string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; + CollectPathsFromRegistry(registryKey, installPaths); + const string wowRegistryKey = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"; + CollectPathsFromRegistry(wowRegistryKey, installPaths); - private static string GetRelativePathToBuildTxt() - { - if (OS.IsWindows || OS.IsUnixLike()) - return "../../build.txt"; - if (OS.IsOSX) - return "Contents/Resources/build.txt"; - throw new Exception("Unknown OS."); - } + installInfos.AddRange(installPaths.Select(a => new RiderInfo(a, false)).ToList()); - private static void CollectPathsFromRegistry(string registryKey, List<string> installPaths) - { - using (var key = Registry.LocalMachine.OpenSubKey(registryKey)) - { - if (key == null) return; - foreach (var subkeyName in key.GetSubKeyNames().Where(a => a.Contains("Rider"))) - { - using (var subkey = key.OpenSubKey(subkeyName)) - { - var folderObject = subkey?.GetValue("InstallLocation"); - if (folderObject == null) continue; - var folder = folderObject.ToString(); - var possiblePath = Path.Combine(folder, @"bin\rider64.exe"); - if (File.Exists(possiblePath)) - installPaths.Add(possiblePath); - } + return installInfos.ToArray(); } - } - } - - private static string[] CollectPathsFromToolbox(string toolboxRiderRootPath, string dirName, string searchPattern, - bool isMac) - { - if (!Directory.Exists(toolboxRiderRootPath)) - return new string[0]; - var channelDirs = Directory.GetDirectories(toolboxRiderRootPath); - var paths = channelDirs.SelectMany(channelDir => + private static string GetToolboxBaseDir() { - try - { - // use history.json - last entry stands for the active build https://jetbrains.slack.com/archives/C07KNP99D/p1547807024066500?thread_ts=1547731708.057700&cid=C07KNP99D - var historyFile = Path.Combine(channelDir, ".history.json"); - if (File.Exists(historyFile)) + if (OS.IsWindows) { - var json = File.ReadAllText(historyFile); - var build = ToolboxHistory.GetLatestBuildFromJson(json); - if (build != null) - { - var buildDir = Path.Combine(channelDir, build); - var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir); - if (executablePaths.Any()) - return executablePaths; - } + var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + return Path.Combine(localAppData, @"JetBrains\Toolbox\apps\Rider"); } - var channelFile = Path.Combine(channelDir, ".channel.settings.json"); - if (File.Exists(channelFile)) + if (OS.IsOSX) { - var json = File.ReadAllText(channelFile).Replace("active-application", "active_application"); - var build = ToolboxInstallData.GetLatestBuildFromJson(json); - if (build != null) - { - var buildDir = Path.Combine(channelDir, build); - var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir); - if (executablePaths.Any()) - return executablePaths; - } + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + return Path.Combine(home, @"Library/Application Support/JetBrains/Toolbox/apps/Rider"); + } } - // changes in toolbox json files format may brake the logic above, so return all found Rider installations - return Directory.GetDirectories(channelDir) - .SelectMany(buildDir => GetExecutablePaths(dirName, searchPattern, isMac, buildDir)); - } - catch (Exception e) - { - // do not write to Debug.Log, just log it. - Logger.Warn($"Failed to get RiderPath from {channelDir}", e); - } - - return new string[0]; - }) - .Where(c => !string.IsNullOrEmpty(c)) - .ToArray(); - return paths; - } - - private static string[] GetExecutablePaths(string dirName, string searchPattern, bool isMac, string buildDir) - { - var folder = new DirectoryInfo(Path.Combine(buildDir, dirName)); - if (!folder.Exists) - return new string[0]; - - if (!isMac) - return new[] {Path.Combine(folder.FullName, searchPattern)}.Where(File.Exists).ToArray(); - return folder.GetDirectories(searchPattern).Select(f => f.FullName) - .Where(Directory.Exists).ToArray(); - } - - // Disable the "field is never assigned" compiler warning. We never assign it, but Unity does. - // Note that Unity disable this warning in the generated C# projects -#pragma warning disable 0649 + if (OS.IsUnixLike()) + { + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + return Path.Combine(home, @".local/share/JetBrains/Toolbox/apps/Rider"); + } + } - [Serializable] - class ToolboxHistory - { - public List<ItemNode> history; + throw new Exception("Unexpected OS."); + } - public static string GetLatestBuildFromJson(string json) - { - try + internal static ProductInfo GetBuildVersion(string path) { - return JsonConvert.DeserializeObject<ToolboxHistory>(json).history.LastOrDefault()?.item.build; + var buildTxtFileInfo = new FileInfo(Path.Combine(path, GetRelativePathToBuildTxt())); + var dir = buildTxtFileInfo.DirectoryName; + if (!Directory.Exists(dir)) + return null; + var buildVersionFile = new FileInfo(Path.Combine(dir, "product-info.json")); + if (!buildVersionFile.Exists) + return null; + var json = File.ReadAllText(buildVersionFile.FullName); + return ProductInfo.GetProductInfo(json); } - catch (Exception) + + internal static Version GetBuildNumber(string path) { - Logger.Warn($"Failed to get latest build from json {json}"); + var file = new FileInfo(Path.Combine(path, GetRelativePathToBuildTxt())); + if (!file.Exists) + return null; + var text = File.ReadAllText(file.FullName); + if (text.Length <= 3) + return null; + + var versionText = text.Substring(3); + return Version.TryParse(versionText, out var v) ? v : null; } - return null; - } - } - - [Serializable] - class ItemNode - { - public BuildNode item; - } + internal static bool IsToolbox(string path) + { + return path.StartsWith(GetToolboxBaseDir()); + } - [Serializable] - class BuildNode - { - public string build; - } + private static string GetRelativePathToBuildTxt() + { + if (OS.IsWindows || OS.IsUnixLike()) + return "../../build.txt"; + if (OS.IsOSX) + return "Contents/Resources/build.txt"; + throw new Exception("Unknown OS."); + } - [Serializable] - public class ProductInfo - { - public string version; - public string versionSuffix; + private static void CollectPathsFromRegistry(string registryKey, List<string> installPaths) + { + using (var key = Registry.LocalMachine.OpenSubKey(registryKey)) + { + if (key == null) return; + foreach (var subkeyName in key.GetSubKeyNames().Where(a => a.Contains("Rider"))) + { + using (var subkey = key.OpenSubKey(subkeyName)) + { + var folderObject = subkey?.GetValue("InstallLocation"); + if (folderObject == null) continue; + var folder = folderObject.ToString(); + var possiblePath = Path.Combine(folder, @"bin\rider64.exe"); + if (File.Exists(possiblePath)) + installPaths.Add(possiblePath); + } + } + } + } - [CanBeNull] - internal static ProductInfo GetProductInfo(string json) - { - try + private static string[] CollectPathsFromToolbox(string toolboxRiderRootPath, string dirName, string searchPattern, + bool isMac) { - var productInfo = JsonConvert.DeserializeObject<ProductInfo>(json); - return productInfo; + if (!Directory.Exists(toolboxRiderRootPath)) + return new string[0]; + + var channelDirs = Directory.GetDirectories(toolboxRiderRootPath); + var paths = channelDirs.SelectMany(channelDir => + { + try + { + // use history.json - last entry stands for the active build https://jetbrains.slack.com/archives/C07KNP99D/p1547807024066500?thread_ts=1547731708.057700&cid=C07KNP99D + var historyFile = Path.Combine(channelDir, ".history.json"); + if (File.Exists(historyFile)) + { + var json = File.ReadAllText(historyFile); + var build = ToolboxHistory.GetLatestBuildFromJson(json); + if (build != null) + { + var buildDir = Path.Combine(channelDir, build); + var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir); + if (executablePaths.Any()) + return executablePaths; + } + } + + var channelFile = Path.Combine(channelDir, ".channel.settings.json"); + if (File.Exists(channelFile)) + { + var json = File.ReadAllText(channelFile).Replace("active-application", "active_application"); + var build = ToolboxInstallData.GetLatestBuildFromJson(json); + if (build != null) + { + var buildDir = Path.Combine(channelDir, build); + var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir); + if (executablePaths.Any()) + return executablePaths; + } + } + + // changes in toolbox json files format may brake the logic above, so return all found Rider installations + return Directory.GetDirectories(channelDir) + .SelectMany(buildDir => GetExecutablePaths(dirName, searchPattern, isMac, buildDir)); + } + catch (Exception e) + { + // do not write to Debug.Log, just log it. + Logger.Warn($"Failed to get RiderPath from {channelDir}", e); + } + + return new string[0]; + }) + .Where(c => !string.IsNullOrEmpty(c)) + .ToArray(); + return paths; } - catch (Exception) + + private static string[] GetExecutablePaths(string dirName, string searchPattern, bool isMac, string buildDir) { - Logger.Warn($"Failed to get version from json {json}"); + var folder = new DirectoryInfo(Path.Combine(buildDir, dirName)); + if (!folder.Exists) + return new string[0]; + + if (!isMac) + return new[] { Path.Combine(folder.FullName, searchPattern) }.Where(File.Exists).ToArray(); + return folder.GetDirectories(searchPattern).Select(f => f.FullName) + .Where(Directory.Exists).ToArray(); } - return null; - } - } + // Disable the "field is never assigned" compiler warning. We never assign it, but Unity does. + // Note that Unity disable this warning in the generated C# projects +#pragma warning disable 0649 - // ReSharper disable once ClassNeverInstantiated.Global - [Serializable] - class ToolboxInstallData - { - // ReSharper disable once InconsistentNaming - public ActiveApplication active_application; + [Serializable] + class ToolboxHistory + { + public List<ItemNode> history; + + public static string GetLatestBuildFromJson(string json) + { + try + { + return JsonConvert.DeserializeObject<ToolboxHistory>(json).history.LastOrDefault()?.item.build; + } + catch (Exception) + { + Logger.Warn($"Failed to get latest build from json {json}"); + } + + return null; + } + } - [CanBeNull] - public static string GetLatestBuildFromJson(string json) - { - try + [Serializable] + class ItemNode { - var toolbox = JsonConvert.DeserializeObject<ToolboxInstallData>(json); - var builds = toolbox.active_application.builds; - if (builds != null && builds.Any()) - return builds.First(); + public BuildNode item; } - catch (Exception) + + [Serializable] + class BuildNode { - Logger.Warn($"Failed to get latest build from json {json}"); + public string build; } - return null; - } - } + [Serializable] + public class ProductInfo + { + public string version; + public string versionSuffix; - [Serializable] - class ActiveApplication - { - // ReSharper disable once InconsistentNaming - public List<string> builds; - } + [CanBeNull] + internal static ProductInfo GetProductInfo(string json) + { + try + { + var productInfo = JsonConvert.DeserializeObject<ProductInfo>(json); + return productInfo; + } + catch (Exception) + { + Logger.Warn($"Failed to get version from json {json}"); + } + + return null; + } + } -#pragma warning restore 0649 + // ReSharper disable once ClassNeverInstantiated.Global + [Serializable] + class ToolboxInstallData + { + // ReSharper disable once InconsistentNaming + public ActiveApplication active_application; - public struct RiderInfo - { - public bool IsToolbox; - public string Presentation; - public Version BuildNumber; - public ProductInfo ProductInfo; - public string Path; - - public RiderInfo(string path, bool isToolbox) - { - BuildNumber = GetBuildNumber(path); - ProductInfo = GetBuildVersion(path); - Path = new FileInfo(path).FullName; // normalize separators - var presentation = $"Rider {BuildNumber}"; - - if (ProductInfo != null && !string.IsNullOrEmpty(ProductInfo.version)) + [CanBeNull] + public static string GetLatestBuildFromJson(string json) + { + try + { + var toolbox = JsonConvert.DeserializeObject<ToolboxInstallData>(json); + var builds = toolbox.active_application.builds; + if (builds != null && builds.Any()) + return builds.First(); + } + catch (Exception) + { + Logger.Warn($"Failed to get latest build from json {json}"); + } + + return null; + } + } + + [Serializable] + class ActiveApplication { - var suffix = string.IsNullOrEmpty(ProductInfo.versionSuffix) ? "" : $" {ProductInfo.versionSuffix}"; - presentation = $"Rider {ProductInfo.version}{suffix}"; + // ReSharper disable once InconsistentNaming + public List<string> builds; } - if (isToolbox) - presentation += " (JetBrains Toolbox)"; +#pragma warning restore 0649 - Presentation = presentation; - IsToolbox = isToolbox; - } - } + public struct RiderInfo + { + public bool IsToolbox; + public string Presentation; + public Version BuildNumber; + public ProductInfo ProductInfo; + public string Path; - private static class Logger - { - internal static void Warn(string message, Exception e = null) - { - throw new Exception(message, e); - } + public RiderInfo(string path, bool isToolbox) + { + BuildNumber = GetBuildNumber(path); + ProductInfo = GetBuildVersion(path); + Path = new FileInfo(path).FullName; // normalize separators + var presentation = $"Rider {BuildNumber}"; + + if (ProductInfo != null && !string.IsNullOrEmpty(ProductInfo.version)) + { + var suffix = string.IsNullOrEmpty(ProductInfo.versionSuffix) ? "" : $" {ProductInfo.versionSuffix}"; + presentation = $"Rider {ProductInfo.version}{suffix}"; + } + + if (isToolbox) + presentation += " (JetBrains Toolbox)"; + + Presentation = presentation; + IsToolbox = isToolbox; + } + } + + private static class Logger + { + internal static void Warn(string message, Exception e = null) + { + throw new Exception(message, e); + } + } } - } } diff --git a/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathManager.cs b/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathManager.cs index b7dba13bbe..558a242bf9 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathManager.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Ides/Rider/RiderPathManager.cs @@ -7,111 +7,111 @@ using GodotTools.Internals; namespace GodotTools.Ides.Rider { - public static class RiderPathManager - { - private static readonly string editorPathSettingName= "mono/editor/editor_path_optional"; - - private static string GetRiderPathFromSettings() - { - var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); - if (editorSettings.HasSetting(editorPathSettingName)) - return (string) editorSettings.GetSetting(editorPathSettingName); - return null; - } - - public static void Initialize() + public static class RiderPathManager { - var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); - var editor = (ExternalEditorId) editorSettings.GetSetting("mono/editor/external_editor"); - if (editor == ExternalEditorId.Rider) - { - if (!editorSettings.HasSetting(editorPathSettingName)) + private static readonly string editorPathSettingName = "mono/editor/editor_path_optional"; + + private static string GetRiderPathFromSettings() { - Globals.EditorDef(editorPathSettingName, "Optional"); - editorSettings.AddPropertyInfo(new Godot.Collections.Dictionary - { - ["type"] = Variant.Type.String, - ["name"] = editorPathSettingName, - ["hint"] = PropertyHint.File, - ["hint_string"] = "" - }); + var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); + if (editorSettings.HasSetting(editorPathSettingName)) + return (string)editorSettings.GetSetting(editorPathSettingName); + return null; } - var riderPath = (string) editorSettings.GetSetting(editorPathSettingName); - if (IsRiderAndExists(riderPath)) + public static void Initialize() { - Globals.EditorDef(editorPathSettingName, riderPath); - return; + var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); + var editor = (ExternalEditorId)editorSettings.GetSetting("mono/editor/external_editor"); + if (editor == ExternalEditorId.Rider) + { + if (!editorSettings.HasSetting(editorPathSettingName)) + { + Globals.EditorDef(editorPathSettingName, "Optional"); + editorSettings.AddPropertyInfo(new Godot.Collections.Dictionary + { + ["type"] = Variant.Type.String, + ["name"] = editorPathSettingName, + ["hint"] = PropertyHint.File, + ["hint_string"] = "" + }); + } + + var riderPath = (string)editorSettings.GetSetting(editorPathSettingName); + if (IsRiderAndExists(riderPath)) + { + Globals.EditorDef(editorPathSettingName, riderPath); + return; + } + + var paths = RiderPathLocator.GetAllRiderPaths(); + + if (!paths.Any()) + return; + + var newPath = paths.Last().Path; + Globals.EditorDef(editorPathSettingName, newPath); + editorSettings.SetSetting(editorPathSettingName, newPath); + } } - var paths = RiderPathLocator.GetAllRiderPaths(); + private static bool IsRider(string path) + { + if (string.IsNullOrEmpty(path)) + { + return false; + } - if (!paths.Any()) - return; + var fileInfo = new FileInfo(path); + var filename = fileInfo.Name.ToLowerInvariant(); + return filename.StartsWith("rider", StringComparison.Ordinal); + } - var newPath = paths.Last().Path; - Globals.EditorDef(editorPathSettingName, newPath); - editorSettings.SetSetting(editorPathSettingName, newPath); - } - } + private static string CheckAndUpdatePath(string riderPath) + { + if (IsRiderAndExists(riderPath)) + { + return riderPath; + } - private static bool IsRider(string path) - { - if (string.IsNullOrEmpty(path)) - { - return false; - } - - var fileInfo = new FileInfo(path); - var filename = fileInfo.Name.ToLowerInvariant(); - return filename.StartsWith("rider", StringComparison.Ordinal); - } + var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); + var paths = RiderPathLocator.GetAllRiderPaths(); - private static string CheckAndUpdatePath(string riderPath) - { - if (IsRiderAndExists(riderPath)) - { - return riderPath; - } - - var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); - var paths = RiderPathLocator.GetAllRiderPaths(); - - if (!paths.Any()) - return null; - - var newPath = paths.Last().Path; - editorSettings.SetSetting(editorPathSettingName, newPath); - Globals.EditorDef(editorPathSettingName, newPath); - return newPath; - } + if (!paths.Any()) + return null; - private static bool IsRiderAndExists(string riderPath) - { - return !string.IsNullOrEmpty(riderPath) && IsRider(riderPath) && new FileInfo(riderPath).Exists; - } + var newPath = paths.Last().Path; + editorSettings.SetSetting(editorPathSettingName, newPath); + Globals.EditorDef(editorPathSettingName, newPath); + return newPath; + } - public static void OpenFile(string slnPath, string scriptPath, int line) - { - var pathFromSettings = GetRiderPathFromSettings(); - var path = CheckAndUpdatePath(pathFromSettings); - - var args = new List<string>(); - args.Add(slnPath); - if (line >= 0) - { - args.Add("--line"); - args.Add(line.ToString()); - } - args.Add(scriptPath); - try - { - Utils.OS.RunProcess(path, args); - } - catch (Exception e) - { - GD.PushError($"Error when trying to run code editor: JetBrains Rider. Exception message: '{e.Message}'"); - } + private static bool IsRiderAndExists(string riderPath) + { + return !string.IsNullOrEmpty(riderPath) && IsRider(riderPath) && new FileInfo(riderPath).Exists; + } + + public static void OpenFile(string slnPath, string scriptPath, int line) + { + var pathFromSettings = GetRiderPathFromSettings(); + var path = CheckAndUpdatePath(pathFromSettings); + + var args = new List<string>(); + args.Add(slnPath); + if (line >= 0) + { + args.Add("--line"); + args.Add(line.ToString()); + } + args.Add(scriptPath); + try + { + Utils.OS.RunProcess(path, args); + } + catch (Exception e) + { + GD.PushError($"Error when trying to run code editor: JetBrains Rider. Exception message: '{e.Message}'"); + } + } } - } } diff --git a/modules/mono/editor/GodotTools/GodotTools/Internals/GodotSharpDirs.cs b/modules/mono/editor/GodotTools/GodotTools/Internals/GodotSharpDirs.cs index ddf3b829b5..6893bc1974 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Internals/GodotSharpDirs.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Internals/GodotSharpDirs.cs @@ -33,10 +33,10 @@ namespace GodotTools.Internals #region Windows-only public static string DataMonoBinDir => internal_DataMonoBinDir(); #endregion - - + + #region Internal - + [MethodImpl(MethodImplOptions.InternalCall)] private static extern string internal_ResDataDir(); [MethodImpl(MethodImplOptions.InternalCall)] @@ -85,7 +85,7 @@ namespace GodotTools.Internals [MethodImpl(MethodImplOptions.InternalCall)] private static extern string internal_DataMonoBinDir(); #endregion - + #endregion } } diff --git a/modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs b/modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs index 2497d276a9..80e45b3a3c 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs @@ -39,10 +39,10 @@ namespace GodotTools.Internals foreach (var classDeclDict in classesArray) { classesList.Add(new ClassDecl( - (string) classDeclDict["name"], - (string) classDeclDict["namespace"], - (bool) classDeclDict["nested"], - (int) classDeclDict["base_count"] + (string)classDeclDict["name"], + (string)classDeclDict["namespace"], + (bool)classDeclDict["nested"], + (int)classDeclDict["base_count"] )); } diff --git a/modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs b/modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs index 1fe07e0bb6..5a867b7f8b 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs @@ -75,7 +75,7 @@ namespace GodotTools.Utils public static bool IsHTML5 => _isHTML5.Value; private static bool? _isUnixCache; - private static readonly string[] UnixLikePlatforms = {Names.OSX, Names.X11, Names.Server, Names.Haiku, Names.Android}; + private static readonly string[] UnixLikePlatforms = { Names.OSX, Names.X11, Names.Server, Names.Haiku, Names.Android }; public static bool IsUnixLike() { @@ -113,10 +113,10 @@ namespace GodotTools.Utils return searchDirs.Select(dir => Path.Combine(dir, name)).FirstOrDefault(File.Exists); return (from dir in searchDirs - select Path.Combine(dir, name) + select Path.Combine(dir, name) into path - from ext in windowsExts - select path + ext).FirstOrDefault(File.Exists); + from ext in windowsExts + select path + ext).FirstOrDefault(File.Exists); } private static string PathWhichUnix(string name) @@ -157,7 +157,7 @@ namespace GodotTools.Utils process.BeginOutputReadLine(); process.BeginErrorReadLine(); - if (IsWindows && process.Id>0) + if (IsWindows && process.Id > 0) User32Dll.AllowSetForegroundWindow(process.Id); // allows application to focus itself } } diff --git a/modules/mono/editor/GodotTools/GodotTools/packages.config b/modules/mono/editor/GodotTools/GodotTools/packages.config index 2db4b4acc6..dd3de2865a 100644 --- a/modules/mono/editor/GodotTools/GodotTools/packages.config +++ b/modules/mono/editor/GodotTools/GodotTools/packages.config @@ -1,5 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <packages> <package id="JetBrains.Annotations" version="2019.1.3" targetFramework="net45" /> <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net45" /> -</packages>
\ No newline at end of file +</packages> diff --git a/modules/mono/editor/script_class_parser.cpp b/modules/mono/editor/script_class_parser.cpp index dcb0ca5a80..1c3a583601 100644 --- a/modules/mono/editor/script_class_parser.cpp +++ b/modules/mono/editor/script_class_parser.cpp @@ -501,12 +501,15 @@ Error ScriptClassParser::parse(const String &p_code) { int type_curly_stack = 0; while (!error && tk != TK_EOF) { - if (tk == TK_IDENTIFIER && String(value) == "class") { + String identifier = value; + if (tk == TK_IDENTIFIER && (identifier == "class" || identifier == "struct")) { + bool is_class = identifier == "class"; + tk = get_token(); if (tk == TK_IDENTIFIER) { String name = value; - int at_level = type_curly_stack; + int at_level = curly_stack; ClassDecl class_decl; @@ -568,48 +571,22 @@ Error ScriptClassParser::parse(const String &p_code) { NameDecl name_decl; name_decl.name = name; - name_decl.type = NameDecl::CLASS_DECL; + name_decl.type = is_class ? NameDecl::CLASS_DECL : NameDecl::STRUCT_DECL; name_stack[at_level] = name_decl; - if (!generic) { // no generics, thanks - classes.push_back(class_decl); - } else if (OS::get_singleton()->is_stdout_verbose()) { - String full_name = class_decl.namespace_; - if (full_name.length()) - full_name += "."; - full_name += class_decl.name; - OS::get_singleton()->print("Ignoring generic class declaration: %s\n", class_decl.name.utf8().get_data()); - } - } - } else if (tk == TK_IDENTIFIER && String(value) == "struct") { - String name; - int at_level = type_curly_stack; - while (true) { - tk = get_token(); - if (tk == TK_IDENTIFIER && name.empty()) { - name = String(value); - } else if (tk == TK_CURLY_BRACKET_OPEN) { - if (name.empty()) { - error_str = "Expected " + get_token_name(TK_IDENTIFIER) + " after keyword 'struct', found " + get_token_name(TK_CURLY_BRACKET_OPEN); - error = true; - return ERR_PARSE_ERROR; + if (is_class) { + if (!generic) { // no generics, thanks + classes.push_back(class_decl); + } else if (OS::get_singleton()->is_stdout_verbose()) { + String full_name = class_decl.namespace_; + if (full_name.length()) + full_name += "."; + full_name += class_decl.name; + OS::get_singleton()->print("Ignoring generic class declaration: %s\n", full_name.utf8().get_data()); } - - curly_stack++; - type_curly_stack++; - break; - } else if (tk == TK_EOF) { - error_str = "Expected " + get_token_name(TK_CURLY_BRACKET_OPEN) + " after struct decl, found " + get_token_name(TK_EOF); - error = true; - return ERR_PARSE_ERROR; } } - - NameDecl name_decl; - name_decl.name = name; - name_decl.type = NameDecl::STRUCT_DECL; - name_stack[at_level] = name_decl; - } else if (tk == TK_IDENTIFIER && String(value) == "namespace") { + } else if (tk == TK_IDENTIFIER && identifier == "namespace") { if (type_curly_stack > 0) { error_str = "Found namespace nested inside type."; error = true; diff --git a/modules/mono/glue/Managed/Files/StringExtensions.cs b/modules/mono/glue/Managed/Files/StringExtensions.cs index 6045c83e95..079e9912d6 100644 --- a/modules/mono/glue/Managed/Files/StringExtensions.cs +++ b/modules/mono/glue/Managed/Files/StringExtensions.cs @@ -18,7 +18,7 @@ namespace Godot int pos = 0; int slices = 1; - while ((pos = instance.Find(splitter, pos)) >= 0) + while ((pos = instance.Find(splitter, true, pos)) >= 0) { slices++; pos += splitter.Length; @@ -325,17 +325,17 @@ namespace Godot // <summary> // Find the first occurrence of a substring, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed. // </summary> - public static int Find(this string instance, string what, int from = 0) + public static int Find(this string instance, string what, bool caseSensitive = true, int from = 0) { - return instance.IndexOf(what, StringComparison.OrdinalIgnoreCase); + return instance.IndexOf(what, from, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase); } // <summary> // Find the last occurrence of a substring, return the starting position of the substring or -1 if not found. Optionally, the initial search index can be passed. // </summary> - public static int FindLast(this string instance, string what) + public static int FindLast(this string instance, string what, bool caseSensitive = true, int from = 0) { - return instance.LastIndexOf(what, StringComparison.OrdinalIgnoreCase); + return instance.LastIndexOf(what, from, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase); } // <summary> @@ -343,7 +343,7 @@ namespace Godot // </summary> public static int FindN(this string instance, string what, int from = 0) { - return instance.IndexOf(what, StringComparison.Ordinal); + return instance.IndexOf(what, from, StringComparison.OrdinalIgnoreCase); } // <summary> @@ -928,7 +928,7 @@ namespace Godot while (true) { - int end = instance.Find(divisor, from); + int end = instance.Find(divisor, true, from); if (end < 0) end = len; if (allowEmpty || end > from) diff --git a/modules/mono/glue/Managed/Managed.csproj b/modules/mono/glue/Managed/Managed.csproj index c8eca71199..8bde3b6d22 100644 --- a/modules/mono/glue/Managed/Managed.csproj +++ b/modules/mono/glue/Managed/Managed.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> diff --git a/modules/mono/mono_gd/gd_mono_android.cpp b/modules/mono/mono_gd/gd_mono_android.cpp index 86af8d1812..29ae4856be 100644 --- a/modules/mono/mono_gd/gd_mono_android.cpp +++ b/modules/mono/mono_gd/gd_mono_android.cpp @@ -81,7 +81,8 @@ struct ScopedLocalRef { ScopedLocalRef &operator=(const ScopedLocalRef &) = delete; ScopedLocalRef(JNIEnv *p_env, T p_local_ref) : - env(p_env), local_ref(p_local_ref) { + env(p_env), + local_ref(p_local_ref) { } ~ScopedLocalRef() { diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp index 4f4439bc60..8eac120939 100644 --- a/platform/iphone/export/export.cpp +++ b/platform/iphone/export/export.cpp @@ -114,54 +114,14 @@ class EditorExportPlatformIOS : public EditorExportPlatform { return false; } - int segments = 0; - bool first = true; for (int i = 0; i < pname.length(); i++) { CharType c = pname[i]; - if (first && c == '.') { - if (r_error) { - *r_error = TTR("Identifier segments must be of non-zero length."); - } - return false; - } - if (c == '.') { - segments++; - first = true; - continue; - } - if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '-')) { + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '-' || c == '.')) { if (r_error) { *r_error = vformat(TTR("The character '%s' is not allowed in Identifier."), String::chr(c)); } return false; } - if (first && (c >= '0' && c <= '9')) { - if (r_error) { - *r_error = TTR("A digit cannot be the first character in a Identifier segment."); - } - return false; - } - if (first && c == '-') { - if (r_error) { - *r_error = vformat(TTR("The character '%s' cannot be the first character in a Identifier segment."), String::chr(c)); - } - return false; - } - first = false; - } - - if (segments == 0) { - if (r_error) { - *r_error = TTR("The Identifier must have at least one '.' separator."); - } - return false; - } - - if (first) { - if (r_error) { - *r_error = TTR("Identifier segments must be of non-zero length."); - } - return false; } return true; diff --git a/platform/iphone/view_controller.h b/platform/iphone/view_controller.h index 68e3bc64fc..c2ef95acb5 100644 --- a/platform/iphone/view_controller.h +++ b/platform/iphone/view_controller.h @@ -45,4 +45,6 @@ - (BOOL)prefersStatusBarHidden; +- (BOOL)prefersHomeIndicatorAutoHidden; + @end diff --git a/platform/iphone/view_controller.mm b/platform/iphone/view_controller.mm index e52ad92bf2..5bdce6277b 100644 --- a/platform/iphone/view_controller.mm +++ b/platform/iphone/view_controller.mm @@ -32,6 +32,8 @@ #include "os_iphone.h" +#include "core/project_settings.h" + extern "C" { int add_path(int, char **); @@ -129,6 +131,14 @@ int add_cmdline(int p_argc, char **p_args) { return YES; } +- (BOOL)prefersHomeIndicatorAutoHidden { + if (GLOBAL_GET("display/window/ios/hide_home_indicator")) { + return YES; + } else { + return NO; + } +} + #ifdef GAME_CENTER_ENABLED - (void)gameCenterViewControllerDidFinish:(GKGameCenterViewController *)gameCenterViewController { //[gameCenterViewController dismissViewControllerAnimated:YES completion:^{GameCenter::get_singleton()->game_center_closed();}];//version for signaling when overlay is completely gone diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp index 9226aea369..590858b558 100644 --- a/platform/osx/export/export.cpp +++ b/platform/osx/export/export.cpp @@ -130,6 +130,9 @@ void EditorExportPlatformOSX::get_export_options(List<ExportOption> *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/version"), "1.0")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/copyright"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "display/high_res"), false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "privacy/camera_usage_description", PROPERTY_HINT_PLACEHOLDER_TEXT, "Provide a message if you need to use the camera"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "privacy/microphone_usage_description", PROPERTY_HINT_PLACEHOLDER_TEXT, "Provide a message if you need to use the microphone"), "")); + #ifdef OSX_ENABLED r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "codesign/enable"), false)); @@ -342,6 +345,12 @@ void EditorExportPlatformOSX::_fix_plist(const Ref<EditorExportPreset> &p_preset strnew += lines[i].replace("$copyright", p_preset->get("application/copyright")) + "\n"; } else if (lines[i].find("$highres") != -1) { strnew += lines[i].replace("$highres", p_preset->get("display/high_res") ? "<true/>" : "<false/>") + "\n"; + } else if (lines[i].find("$camera_usage_description") != -1) { + String description = p_preset->get("privacy/camera_usage_description"); + strnew += lines[i].replace("$camera_usage_description", description) + "\n"; + } else if (lines[i].find("$microphone_usage_description") != -1) { + String description = p_preset->get("privacy/microphone_usage_description"); + strnew += lines[i].replace("$microphone_usage_description", description) + "\n"; } else { strnew += lines[i] + "\n"; } diff --git a/scene/3d/collision_polygon.cpp b/scene/3d/collision_polygon.cpp index 37aa95fb43..a59cce5c66 100644 --- a/scene/3d/collision_polygon.cpp +++ b/scene/3d/collision_polygon.cpp @@ -44,7 +44,7 @@ void CollisionPolygon::_build_polygon() { if (polygon.size() == 0) return; - Vector<Vector<Vector2> > decomp = Geometry::decompose_polygon(polygon); + Vector<Vector<Vector2> > decomp = Geometry::decompose_polygon_in_convex(polygon); if (decomp.size() == 0) return; diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index ce3f2b3b1a..72e8ae1b26 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -239,14 +239,14 @@ void Tween::_bind_methods() { ClassDB::bind_method(D_METHOD("get_runtime"), &Tween::get_runtime); // Bind interpolation and follow methods - ClassDB::bind_method(D_METHOD("interpolate_property", "object", "property", "initial_val", "final_val", "duration", "trans_type", "ease_type", "delay"), &Tween::interpolate_property, DEFVAL(0)); - ClassDB::bind_method(D_METHOD("interpolate_method", "object", "method", "initial_val", "final_val", "duration", "trans_type", "ease_type", "delay"), &Tween::interpolate_method, DEFVAL(0)); + ClassDB::bind_method(D_METHOD("interpolate_property", "object", "property", "initial_val", "final_val", "duration", "trans_type", "ease_type", "delay"), &Tween::interpolate_property, DEFVAL(TRANS_LINEAR), DEFVAL(EASE_IN_OUT), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("interpolate_method", "object", "method", "initial_val", "final_val", "duration", "trans_type", "ease_type", "delay"), &Tween::interpolate_method, DEFVAL(TRANS_LINEAR), DEFVAL(EASE_IN_OUT), DEFVAL(0)); ClassDB::bind_method(D_METHOD("interpolate_callback", "object", "duration", "callback", "arg1", "arg2", "arg3", "arg4", "arg5"), &Tween::interpolate_callback, DEFVAL(Variant()), DEFVAL(Variant()), DEFVAL(Variant()), DEFVAL(Variant()), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("interpolate_deferred_callback", "object", "duration", "callback", "arg1", "arg2", "arg3", "arg4", "arg5"), &Tween::interpolate_deferred_callback, DEFVAL(Variant()), DEFVAL(Variant()), DEFVAL(Variant()), DEFVAL(Variant()), DEFVAL(Variant())); - ClassDB::bind_method(D_METHOD("follow_property", "object", "property", "initial_val", "target", "target_property", "duration", "trans_type", "ease_type", "delay"), &Tween::follow_property, DEFVAL(0)); - ClassDB::bind_method(D_METHOD("follow_method", "object", "method", "initial_val", "target", "target_method", "duration", "trans_type", "ease_type", "delay"), &Tween::follow_method, DEFVAL(0)); - ClassDB::bind_method(D_METHOD("targeting_property", "object", "property", "initial", "initial_val", "final_val", "duration", "trans_type", "ease_type", "delay"), &Tween::targeting_property, DEFVAL(0)); - ClassDB::bind_method(D_METHOD("targeting_method", "object", "method", "initial", "initial_method", "final_val", "duration", "trans_type", "ease_type", "delay"), &Tween::targeting_method, DEFVAL(0)); + ClassDB::bind_method(D_METHOD("follow_property", "object", "property", "initial_val", "target", "target_property", "duration", "trans_type", "ease_type", "delay"), &Tween::follow_property, DEFVAL(TRANS_LINEAR), DEFVAL(EASE_IN_OUT), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("follow_method", "object", "method", "initial_val", "target", "target_method", "duration", "trans_type", "ease_type", "delay"), &Tween::follow_method, DEFVAL(TRANS_LINEAR), DEFVAL(EASE_IN_OUT), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("targeting_property", "object", "property", "initial", "initial_val", "final_val", "duration", "trans_type", "ease_type", "delay"), &Tween::targeting_property, DEFVAL(TRANS_LINEAR), DEFVAL(EASE_IN_OUT), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("targeting_method", "object", "method", "initial", "initial_method", "final_val", "duration", "trans_type", "ease_type", "delay"), &Tween::targeting_method, DEFVAL(TRANS_LINEAR), DEFVAL(EASE_IN_OUT), DEFVAL(0)); // Add the Tween signals ADD_SIGNAL(MethodInfo("tween_started", PropertyInfo(Variant::OBJECT, "object"), PropertyInfo(Variant::NODE_PATH, "key"))); diff --git a/scene/animation/tween.h b/scene/animation/tween.h index e4c95a93d6..f301d8d76b 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -179,21 +179,14 @@ public: real_t tell() const; real_t get_runtime() const; - bool interpolate_property(Object *p_object, NodePath p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0); - - bool interpolate_method(Object *p_object, StringName p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0); - + bool interpolate_property(Object *p_object, NodePath p_property, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); + bool interpolate_method(Object *p_object, StringName p_method, Variant p_initial_val, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); bool interpolate_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE); - bool interpolate_deferred_callback(Object *p_object, real_t p_duration, String p_callback, VARIANT_ARG_DECLARE); - - bool follow_property(Object *p_object, NodePath p_property, Variant p_initial_val, Object *p_target, NodePath p_target_property, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0); - - bool follow_method(Object *p_object, StringName p_method, Variant p_initial_val, Object *p_target, StringName p_target_method, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0); - - bool targeting_property(Object *p_object, NodePath p_property, Object *p_initial, NodePath p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0); - - bool targeting_method(Object *p_object, StringName p_method, Object *p_initial, StringName p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type, EaseType p_ease_type, real_t p_delay = 0); + bool follow_property(Object *p_object, NodePath p_property, Variant p_initial_val, Object *p_target, NodePath p_target_property, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); + bool follow_method(Object *p_object, StringName p_method, Variant p_initial_val, Object *p_target, StringName p_target_method, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); + bool targeting_property(Object *p_object, NodePath p_property, Object *p_initial, NodePath p_initial_property, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); + bool targeting_method(Object *p_object, StringName p_method, Object *p_initial, StringName p_initial_method, Variant p_final_val, real_t p_duration, TransitionType p_trans_type = TRANS_LINEAR, EaseType p_ease_type = EASE_IN_OUT, real_t p_delay = 0); Tween(); ~Tween(); diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp index ca4c255855..a68462f4d4 100644 --- a/scene/gui/button.cpp +++ b/scene/gui/button.cpp @@ -190,6 +190,13 @@ void Button::_notification(int p_what) { Point2 icon_ofs = !_icon.is_null() ? Point2(icon_region.size.width + get_constant("hseparation"), 0) : Point2(); int text_clip = size.width - style->get_minimum_size().width - icon_ofs.width; + if (_internal_margin[MARGIN_LEFT] > 0) { + text_clip -= _internal_margin[MARGIN_LEFT] + get_constant("hseparation"); + } + if (_internal_margin[MARGIN_RIGHT] > 0) { + text_clip -= _internal_margin[MARGIN_RIGHT] + get_constant("hseparation"); + } + Point2 text_ofs = (size - style->get_minimum_size() - icon_ofs - font->get_string_size(xl_text) - Point2(_internal_margin[MARGIN_RIGHT] - _internal_margin[MARGIN_LEFT], 0)) / 2.0; switch (align) { diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index 08faaf7d45..5561bce714 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -191,16 +191,20 @@ void PopupMenu::_submenu_timeout() { void PopupMenu::_scroll(float p_factor, const Point2 &p_over) { - const float global_y = get_global_position().y; - int vseparation = get_constant("vseparation"); Ref<Font> font = get_font("font"); float dy = (vseparation + font->get_height()) * 3 * p_factor * get_global_transform().get_scale().y; - if (dy > 0 && global_y < 0) - dy = MIN(dy, -global_y - 1); - else if (dy < 0 && global_y + get_size().y * get_global_transform().get_scale().y > get_viewport_rect().size.y) - dy = -MIN(-dy, global_y + get_size().y * get_global_transform().get_scale().y - get_viewport_rect().size.y - 1); + if (dy > 0) { + const float global_top = get_global_position().y; + const float limit = global_top < 0 ? -global_top : 0; + dy = MIN(dy, limit); + } else if (dy < 0) { + const float global_bottom = get_global_position().y + get_size().y * get_global_transform().get_scale().y; + const float viewport_height = get_viewport_rect().size.y; + const float limit = global_bottom > viewport_height ? global_bottom - viewport_height : 0; + dy = -MIN(-dy, limit); + } set_position(get_position() + Vector2(0, dy)); Ref<InputEventMouseMotion> ie; diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 0331046492..abca865ae0 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -1701,6 +1701,9 @@ bool RichTextLabel::remove_line(const int p_line) { if (!was_newline) { current_frame->lines.remove(p_line); + if (current_frame->lines.size() == 0) { + current_frame->lines.resize(1); + } } if (p_line == 0 && current->subitems.size() > 0) diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp index 4afb07cb6f..0d94d4dbf4 100644 --- a/scene/resources/mesh.cpp +++ b/scene/resources/mesh.cpp @@ -483,6 +483,7 @@ void Mesh::_bind_methods() { ClassDB::bind_method(D_METHOD("set_lightmap_size_hint", "size"), &Mesh::set_lightmap_size_hint); ClassDB::bind_method(D_METHOD("get_lightmap_size_hint"), &Mesh::get_lightmap_size_hint); + ClassDB::bind_method(D_METHOD("get_aabb"), &Mesh::get_aabb); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "lightmap_size_hint"), "set_lightmap_size_hint", "get_lightmap_size_hint"); diff --git a/scene/resources/visual_shader_nodes.cpp b/scene/resources/visual_shader_nodes.cpp index a94fdd9d7b..6e4b5d9af0 100644 --- a/scene/resources/visual_shader_nodes.cpp +++ b/scene/resources/visual_shader_nodes.cpp @@ -715,6 +715,7 @@ void VisualShaderNodeTexture::_bind_methods() { BIND_ENUM_CONSTANT(SOURCE_2D_TEXTURE); BIND_ENUM_CONSTANT(SOURCE_2D_NORMAL); BIND_ENUM_CONSTANT(SOURCE_DEPTH); + BIND_ENUM_CONSTANT(SOURCE_PORT); BIND_ENUM_CONSTANT(TYPE_DATA); BIND_ENUM_CONSTANT(TYPE_COLOR); BIND_ENUM_CONSTANT(TYPE_NORMALMAP); diff --git a/servers/audio/effects/audio_effect_record.cpp b/servers/audio/effects/audio_effect_record.cpp index 83d78daff4..3b6b1de806 100644 --- a/servers/audio/effects/audio_effect_record.cpp +++ b/servers/audio/effects/audio_effect_record.cpp @@ -192,10 +192,11 @@ void AudioEffectRecord::set_recording_active(bool p_record) { } ensure_thread_stopped(); + recording_active = true; current_instance->init(); + } else { + recording_active = false; } - - recording_active = p_record; } bool AudioEffectRecord::is_recording_active() const { diff --git a/thirdparty/README.md b/thirdparty/README.md index 9571ee49b9..2ab0aedf1c 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -8,21 +8,6 @@ - License: BSD-3-Clause -## b2d_convexdecomp - -- Upstream: https://github.com/erincatto/Box2D/tree/master/Contributions/Utilities/ConvexDecomposition -- Version: git (25615e0, 2015) with modifications -- License: zlib - -The files were adapted to Godot by removing the dependency on b2Math (replacing -it by b2Glue.h) and commenting out some verbose printf calls. -Upstream code has not changed in 10 years, no need to keep track of changes. - -Important: Some files have Godot-made changes. -They are marked with `// -- GODOT start --` and `// -- GODOT end --` -comments. - - ## bullet - Upstream: https://github.com/bulletphysics/bullet3 diff --git a/thirdparty/b2d_convexdecomp/b2Glue.h b/thirdparty/b2d_convexdecomp/b2Glue.h deleted file mode 100644 index 175f75be75..0000000000 --- a/thirdparty/b2d_convexdecomp/b2Glue.h +++ /dev/null @@ -1,174 +0,0 @@ -/* -* Copyright (c) 2006-2009 Erin Catto http://www.gphysics.com -* -* This software is provided 'as-is', without any express or implied -* warranty. In no event will the authors be held liable for any damages -* arising from the use of this software. -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software -* in a product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef B2GLUE_H -#define B2GLUE_H - -#include "core/math/vector2.h" - -#include <limits.h> - -namespace b2ConvexDecomp { - -typedef real_t float32; -typedef int32_t int32; - -static inline float32 b2Sqrt(float32 val) { return Math::sqrt(val); } -#define b2_maxFloat FLT_MAX -#define b2_epsilon CMP_EPSILON -#define b2_pi 3.14159265359f -#define b2_maxPolygonVertices 16 -#define b2Max MAX -#define b2Min MIN -#define b2Clamp CLAMP -#define b2Abs ABS -/// A small length used as a collision and constraint tolerance. Usually it is -/// chosen to be numerically significant, but visually insignificant. -#define b2_linearSlop 0.005f - -/// A small angle used as a collision and constraint tolerance. Usually it is -/// chosen to be numerically significant, but visually insignificant. -#define b2_angularSlop (2.0f / 180.0f * b2_pi) - -/// A 2D column vector. -struct b2Vec2 -{ - /// Default constructor does nothing (for performance). - b2Vec2() {} - - /// Construct using coordinates. - b2Vec2(float32 x, float32 y) : x(x), y(y) {} - - /// Set this vector to all zeros. - void SetZero() { x = 0.0f; y = 0.0f; } - - /// Set this vector to some specified coordinates. - void Set(float32 x_, float32 y_) { x = x_; y = y_; } - - /// Negate this vector. - b2Vec2 operator -() const { b2Vec2 v; v.Set(-x, -y); return v; } - - /// Read from and indexed element. - float32 operator () (int32 i) const - { - return (&x)[i]; - } - - /// Write to an indexed element. - float32& operator () (int32 i) - { - return (&x)[i]; - } - - /// Add a vector to this vector. - void operator += (const b2Vec2& v) - { - x += v.x; y += v.y; - } - - /// Subtract a vector from this vector. - void operator -= (const b2Vec2& v) - { - x -= v.x; y -= v.y; - } - - /// Multiply this vector by a scalar. - void operator *= (float32 a) - { - x *= a; y *= a; - } - - /// Get the length of this vector (the norm). - float32 Length() const - { - return b2Sqrt(x * x + y * y); - } - - /// Get the length squared. For performance, use this instead of - /// b2Vec2::Length (if possible). - float32 LengthSquared() const - { - return x * x + y * y; - } - - bool operator==(const b2Vec2& p_v) const { - return x==p_v.x && y==p_v.y; - } - b2Vec2 operator+(const b2Vec2& p_v) const { - return b2Vec2(x+p_v.x,y+p_v.y); - } - b2Vec2 operator-(const b2Vec2& p_v) const { - return b2Vec2(x-p_v.x,y-p_v.y); - } - - b2Vec2 operator*(float32 f) const { - return b2Vec2(f*x,f*y); - } - - /// Convert this vector into a unit vector. Returns the length. - float32 Normalize() - { - float32 length = Length(); - if (length < b2_epsilon) - { - return 0.0f; - } - float32 invLength = 1.0f / length; - x *= invLength; - y *= invLength; - - return length; - } - - /* - /// Does this vector contain finite coordinates? - bool IsValid() const - { - return b2IsValid(x) && b2IsValid(y); - } - */ - - float32 x, y; -}; - -inline b2Vec2 operator*(float32 f,const b2Vec2& p_v) { - return b2Vec2(f*p_v.x,f*p_v.y); -} - -/// Perform the dot product on two vectors. -inline float32 b2Dot(const b2Vec2& a, const b2Vec2& b) -{ - return a.x * b.x + a.y * b.y; -} - -/// Perform the cross product on two vectors. In 2D this produces a scalar. -inline float32 b2Cross(const b2Vec2& a, const b2Vec2& b) -{ - return a.x * b.y - a.y * b.x; -} - -/// Perform the cross product on a vector and a scalar. In 2D this produces -/// a vector. -inline b2Vec2 b2Cross(const b2Vec2& a, float32 s) -{ - return b2Vec2(s * a.y, -s * a.x); -} - -} - -#endif diff --git a/thirdparty/b2d_convexdecomp/b2Polygon.cpp b/thirdparty/b2d_convexdecomp/b2Polygon.cpp deleted file mode 100644 index c80204ae21..0000000000 --- a/thirdparty/b2d_convexdecomp/b2Polygon.cpp +++ /dev/null @@ -1,1591 +0,0 @@ -/* - * Copyright (c) 2007 Eric Jordan - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - -// This utility works with Box2d version 2.0 (or higher), and not with 1.4.3 - -#include "b2Triangle.h" -#include "b2Polygon.h" - -#include <math.h> -#include <limits.h> -#include <assert.h> -#define b2Assert assert - -namespace b2ConvexDecomp { - - -//If you're using 1.4.3, b2_toiSlop won't exist, so set this equal to 0 -static const float32 toiSlop = 0.0f; - -/* - * Check if the lines a0->a1 and b0->b1 cross. - * If they do, intersectionPoint will be filled - * with the point of crossing. - * - * Grazing lines should not return true. - */ -bool intersect(const b2Vec2& a0, const b2Vec2& a1, - const b2Vec2& b0, const b2Vec2& b1, - b2Vec2& intersectionPoint) { - - if (a0 == b0 || a0 == b1 || a1 == b0 || a1 == b1) return false; - float x1 = a0.x; float y1 = a0.y; - float x2 = a1.x; float y2 = a1.y; - float x3 = b0.x; float y3 = b0.y; - float x4 = b1.x; float y4 = b1.y; - - //AABB early exit - if (b2Max(x1,x2) < b2Min(x3,x4) || b2Max(x3,x4) < b2Min(x1,x2) ) return false; - if (b2Max(y1,y2) < b2Min(y3,y4) || b2Max(y3,y4) < b2Min(y1,y2) ) return false; - - float ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)); - float ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)); - float denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); - if (b2Abs(denom) < CMP_EPSILON) { - //Lines are too close to parallel to call - return false; - } - ua /= denom; - ub /= denom; - - if ((0 < ua) && (ua < 1) && (0 < ub) && (ub < 1)) { - //if (intersectionPoint){ - intersectionPoint.x = (x1 + ua * (x2 - x1)); - intersectionPoint.y = (y1 + ua * (y2 - y1)); - //} - //printf("%f, %f -> %f, %f crosses %f, %f -> %f, %f\n",x1,y1,x2,y2,x3,y3,x4,y4); - return true; - } - - return false; -} - -/* - * True if line from a0->a1 intersects b0->b1 - */ -bool intersect(const b2Vec2& a0, const b2Vec2& a1, - const b2Vec2& b0, const b2Vec2& b1) { - b2Vec2 myVec(0.0f,0.0f); - return intersect(a0, a1, b0, b1, myVec); -} - -b2Polygon::b2Polygon(float32* _x, float32* _y, int32 nVert) { - nVertices = nVert; - x = new float32[nVertices]; - y = new float32[nVertices]; - for (int32 i = 0; i < nVertices; ++i) { - x[i] = _x[i]; - y[i] = _y[i]; - } - areaIsSet = false; -} - -b2Polygon::b2Polygon(b2Vec2* v, int32 nVert) { - nVertices = nVert; - x = new float32[nVertices]; - y = new float32[nVertices]; - for (int32 i = 0; i < nVertices; ++i) { - x[i] = v[i].x; - y[i] = v[i].y; - - } - areaIsSet = false; -} - -b2Polygon::b2Polygon() { - x = NULL; - y = NULL; - nVertices = 0; - areaIsSet = false; -} - -b2Polygon::~b2Polygon() { - //printf("About to delete poly with %d vertices\n",nVertices); - delete[] x; - delete[] y; -} - -float32 b2Polygon::GetArea() { - // TODO: fix up the areaIsSet caching so that it can be used - //if (areaIsSet) return area; - area = 0.0f; - - //First do wraparound - area += x[nVertices-1]*y[0]-x[0]*y[nVertices-1]; - for (int i=0; i<nVertices-1; ++i){ - area += x[i]*y[i+1]-x[i+1]*y[i]; - } - area *= .5f; - areaIsSet = true; - return area; -} - -bool b2Polygon::IsCCW() { - return (GetArea() > 0.0f); -} - -void b2Polygon::MergeParallelEdges(float32 tolerance) { - if (nVertices <= 3) return; //Can't do anything useful here to a triangle - bool* mergeMe = new bool[nVertices]; - int32 newNVertices = nVertices; - for (int32 i = 0; i < nVertices; ++i) { - int32 lower = (i == 0) ? (nVertices - 1) : (i - 1); - int32 middle = i; - int32 upper = (i == nVertices - 1) ? (0) : (i + 1); - float32 dx0 = x[middle] - x[lower]; - float32 dy0 = y[middle] - y[lower]; - float32 dx1 = x[upper] - x[middle]; - float32 dy1 = y[upper] - y[middle]; - float32 norm0 = sqrtf(dx0*dx0+dy0*dy0); - float32 norm1 = sqrtf(dx1*dx1+dy1*dy1); - if ( !(norm0 > 0.0f && norm1 > 0.0f) && newNVertices > 3 ) { - //Merge identical points - mergeMe[i] = true; - --newNVertices; - } - dx0 /= norm0; dy0 /= norm0; - dx1 /= norm1; dy1 /= norm1; - float32 cross = dx0 * dy1 - dx1 * dy0; - float32 dot = dx0 * dx1 + dy0 * dy1; - if (fabs(cross) < tolerance && dot > 0 && newNVertices > 3) { - mergeMe[i] = true; - --newNVertices; - } else { - mergeMe[i] = false; - } - } - if(newNVertices == nVertices || newNVertices == 0) { - delete[] mergeMe; - return; - } - float32* newx = new float32[newNVertices]; - float32* newy = new float32[newNVertices]; - int32 currIndex = 0; - for (int32 i=0; i < nVertices; ++i) { - if (mergeMe[i] || newNVertices == 0 || currIndex == newNVertices) continue; - b2Assert(currIndex < newNVertices); - newx[currIndex] = x[i]; - newy[currIndex] = y[i]; - ++currIndex; - } - delete[] x; - delete[] y; - delete[] mergeMe; - x = newx; - y = newy; - nVertices = newNVertices; - //printf("%d \n", newNVertices); -} - - /* - * Allocates and returns pointer to vector vertex array. - * Length of array is nVertices. - */ -b2Vec2* b2Polygon::GetVertexVecs() { - b2Vec2* out = new b2Vec2[nVertices]; - for (int32 i = 0; i < nVertices; ++i) { - out[i].Set(x[i], y[i]); - } - return out; -} - -b2Polygon::b2Polygon(b2Triangle& t) { - nVertices = 3; - x = new float[nVertices]; - y = new float[nVertices]; - for (int32 i = 0; i < nVertices; ++i) { - x[i] = t.x[i]; - y[i] = t.y[i]; - } -} - -void b2Polygon::Set(const b2Polygon& p) { - if (nVertices != p.nVertices){ - nVertices = p.nVertices; - delete[] x; - delete[] y; - x = new float32[nVertices]; - y = new float32[nVertices]; - } - - for (int32 i = 0; i < nVertices; ++i) { - x[i] = p.x[i]; - y[i] = p.y[i]; - } - areaIsSet = false; -} - - /* - * Assuming the polygon is simple, checks if it is convex. - */ -bool b2Polygon::IsConvex() { - bool isPositive = false; - for (int32 i = 0; i < nVertices; ++i) { - int32 lower = (i == 0) ? (nVertices - 1) : (i - 1); - int32 middle = i; - int32 upper = (i == nVertices - 1) ? (0) : (i + 1); - float32 dx0 = x[middle] - x[lower]; - float32 dy0 = y[middle] - y[lower]; - float32 dx1 = x[upper] - x[middle]; - float32 dy1 = y[upper] - y[middle]; - float32 cross = dx0 * dy1 - dx1 * dy0; - // Cross product should have same sign - // for each vertex if poly is convex. - bool newIsP = (cross >= 0) ? true : false; - if (i == 0) { - isPositive = newIsP; - } - else if (isPositive != newIsP) { - return false; - } - } - return true; -} - -/* - * Pulled from b2Shape.cpp, assertions removed - */ -static b2Vec2 PolyCentroid(const b2Vec2* vs, int32 count) -{ - b2Vec2 c; c.Set(0.0f, 0.0f); - float32 area = 0.0f; - - const float32 inv3 = 1.0f / 3.0f; - b2Vec2 pRef(0.0f, 0.0f); - for (int32 i = 0; i < count; ++i) - { - // Triangle vertices. - b2Vec2 p1 = pRef; - b2Vec2 p2 = vs[i]; - b2Vec2 p3 = i + 1 < count ? vs[i+1] : vs[0]; - - b2Vec2 e1 = p2 - p1; - b2Vec2 e2 = p3 - p1; - - float32 D = b2Cross(e1, e2); - - float32 triangleArea = 0.5f * D; - area += triangleArea; - - // Area weighted centroid - c += (p1 + p2 + p3) * triangleArea * inv3; - } - - // Centroid - c *= 1.0f / area; - return c; -} - - -/* - * Checks if polygon is valid for use in Box2d engine. - * Last ditch effort to ensure no invalid polygons are - * added to world geometry. - * - * Performs a full check, for simplicity, convexity, - * orientation, minimum angle, and volume. This won't - * be very efficient, and a lot of it is redundant when - * other tools in this section are used. - */ -bool b2Polygon::IsUsable(bool printErrors){ - int32 error = -1; - bool noError = true; - if (nVertices < 3 || nVertices > b2_maxPolygonVertices) {noError = false; error = 0;} - if (!IsConvex()) {noError = false; error = 1;} - if (!IsSimple()) {noError = false; error = 2;} - if (GetArea() < CMP_EPSILON) {noError = false; error = 3;} - - //Compute normals - b2Vec2* normals = new b2Vec2[nVertices]; - b2Vec2* vertices = new b2Vec2[nVertices]; - for (int32 i = 0; i < nVertices; ++i){ - vertices[i].Set(x[i],y[i]); - int32 i1 = i; - int32 i2 = i + 1 < nVertices ? i + 1 : 0; - b2Vec2 edge(x[i2]-x[i1],y[i2]-y[i1]); - normals[i] = b2Cross(edge, 1.0f); - normals[i].Normalize(); - } - - //Required side checks - for (int32 i=0; i<nVertices; ++i){ - int32 iminus = (i==0)?nVertices-1:i-1; - //int32 iplus = (i==nVertices-1)?0:i+1; - - //Parallel sides check - float32 cross = b2Cross(normals[iminus], normals[i]); - cross = b2Clamp(cross, -1.0f, 1.0f); - float32 angle = asinf(cross); - if(angle <= b2_angularSlop){ - noError = false; - error = 4; - break; - } - - //Too skinny check - for (int32 j=0; j<nVertices; ++j){ - if (j == i || j == (i + 1) % nVertices){ - continue; - } - float32 s = b2Dot(normals[i], vertices[j] - vertices[i]); - if (s >= -b2_linearSlop){ - noError = false; - error = 5; - } - } - - - b2Vec2 centroid = PolyCentroid(vertices,nVertices); - b2Vec2 n1 = normals[iminus]; - b2Vec2 n2 = normals[i]; - b2Vec2 v = vertices[i] - centroid; - - b2Vec2 d; - d.x = b2Dot(n1, v) - toiSlop; - d.y = b2Dot(n2, v) - toiSlop; - - // Shifting the edge inward by b2_toiSlop should - // not cause the plane to pass the centroid. - if ((d.x < 0.0f)||(d.y < 0.0f)){ - noError = false; - error = 6; - } - - } - delete[] vertices; - delete[] normals; - - if (!noError && printErrors){ - printf("Found invalid polygon, "); - switch(error){ - case 0: - printf("must have between 3 and %d vertices.\n",b2_maxPolygonVertices); - break; - case 1: - printf("must be convex.\n"); - break; - case 2: - printf("must be simple (cannot intersect itself).\n"); - break; - case 3: - printf("area is too small.\n"); - break; - case 4: - printf("sides are too close to parallel.\n"); - break; - case 5: - printf("polygon is too thin.\n"); - break; - case 6: - printf("core shape generation would move edge past centroid (too thin).\n"); - break; - default: - printf("don't know why.\n"); - } - } - return noError; -} - - -bool b2Polygon::IsUsable(){ - return IsUsable(B2_POLYGON_REPORT_ERRORS); -} - -//Check for edge crossings -bool b2Polygon::IsSimple() { - for (int32 i=0; i<nVertices; ++i){ - int32 iplus = (i+1 > nVertices-1)?0:i+1; - b2Vec2 a1(x[i],y[i]); - b2Vec2 a2(x[iplus],y[iplus]); - for (int32 j=i+1; j<nVertices; ++j){ - int32 jplus = (j+1 > nVertices-1)?0:j+1; - b2Vec2 b1(x[j],y[j]); - b2Vec2 b2(x[jplus],y[jplus]); - if (intersect(a1,a2,b1,b2)){ - return false; - } - } - } - return true; -} - - /* - * Tries to add a triangle to the polygon. Returns null if it can't connect - * properly, otherwise returns a pointer to the new Polygon. Assumes bitwise - * equality of joined vertex positions. - * - * Remember to delete the pointer afterwards. - * Todo: Make this return a b2Polygon instead - * of a pointer to a heap-allocated one. - * - * For internal use. - */ -b2Polygon* b2Polygon::Add(b2Triangle& t) { - // First, find vertices that connect - int32 firstP = -1; - int32 firstT = -1; - int32 secondP = -1; - int32 secondT = -1; - for (int32 i = 0; i < nVertices; i++) { - if (t.x[0] == x[i] && t.y[0] == y[i]) { - if (firstP == -1) { - firstP = i; - firstT = 0; - } - else { - secondP = i; - secondT = 0; - } - } - else if (t.x[1] == x[i] && t.y[1] == y[i]) { - if (firstP == -1) { - firstP = i; - firstT = 1; - } - else { - secondP = i; - secondT = 1; - } - } - else if (t.x[2] == x[i] && t.y[2] == y[i]) { - if (firstP == -1) { - firstP = i; - firstT = 2; - } - else { - secondP = i; - secondT = 2; - } - } - else { - } - } - // Fix ordering if first should be last vertex of poly - if (firstP == 0 && secondP == nVertices - 1) { - firstP = nVertices - 1; - secondP = 0; - } - - // Didn't find it - if (secondP == -1) { - return NULL; - } - - // Find tip index on triangle - int32 tipT = 0; - if (tipT == firstT || tipT == secondT) - tipT = 1; - if (tipT == firstT || tipT == secondT) - tipT = 2; - - float32* newx = new float[nVertices + 1]; - float32* newy = new float[nVertices + 1]; - int32 currOut = 0; - for (int32 i = 0; i < nVertices; i++) { - newx[currOut] = x[i]; - newy[currOut] = y[i]; - if (i == firstP) { - ++currOut; - newx[currOut] = t.x[tipT]; - newy[currOut] = t.y[tipT]; - } - ++currOut; - } - b2Polygon* result = new b2Polygon(newx, newy, nVertices+1); - delete[] newx; - delete[] newy; - return result; -} - - /** - * Adds this polygon to a PolyDef. - */ -#if 0 -void b2Polygon::AddTo(b2FixtureDef& pd) { - if (nVertices < 3) return; - - b2Assert(nVertices <= b2_maxPolygonVertices); - - b2Vec2* vecs = GetVertexVecs(); - b2Vec2* vecsToAdd = new b2Vec2[nVertices]; - - int32 offset = 0; - - b2PolygonShape *polyShape = new b2PolygonShape; - int32 ind; - - for (int32 i = 0; i < nVertices; ++i) { - - //Omit identical neighbors (including wraparound) - ind = i - offset; - if (vecs[i].x==vecs[remainder(i+1,nVertices)].x && - vecs[i].y==vecs[remainder(i+1,nVertices)].y){ - offset++; - continue; - } - - vecsToAdd[ind] = vecs[i]; - - } - - polyShape->Set((const b2Vec2*)vecsToAdd, ind+1); - pd.shape = polyShape; - - delete[] vecs; - delete[] vecsToAdd; -} -#endif - /** - * Finds and fixes "pinch points," points where two polygon - * vertices are at the same point. - * - * If a pinch point is found, pin is broken up into poutA and poutB - * and true is returned; otherwise, returns false. - * - * Mostly for internal use. - */ -bool ResolvePinchPoint(const b2Polygon& pin, b2Polygon& poutA, b2Polygon& poutB){ - if (pin.nVertices < 3) return false; - float32 tol = .001f; - bool hasPinchPoint = false; - int32 pinchIndexA = -1; - int32 pinchIndexB = -1; - for (int i=0; i<pin.nVertices; ++i){ - for (int j=i+1; j<pin.nVertices; ++j){ - //Don't worry about pinch points where the points - //are actually just dupe neighbors - if (b2Abs(pin.x[i]-pin.x[j])<tol&&b2Abs(pin.y[i]-pin.y[j])<tol&&j!=i+1){ - pinchIndexA = i; - pinchIndexB = j; - //printf("pinch: %f, %f == %f, %f\n",pin.x[i],pin.y[i],pin.x[j],pin.y[j]); - //printf("at indexes %d, %d\n",i,j); - hasPinchPoint = true; - break; - } - } - if (hasPinchPoint) break; - } - if (hasPinchPoint){ - //printf("Found pinch point\n"); - int32 sizeA = pinchIndexB - pinchIndexA; - if (sizeA == pin.nVertices) return false;//has dupe points at wraparound, not a problem here - float32* xA = new float32[sizeA]; - float32* yA = new float32[sizeA]; - for (int32 i=0; i < sizeA; ++i){ - int32 ind = remainder(pinchIndexA+i,pin.nVertices); - xA[i] = pin.x[ind]; - yA[i] = pin.y[ind]; - } - b2Polygon tempA(xA,yA,sizeA); - poutA.Set(tempA); - delete[] xA; - delete[] yA; - - int32 sizeB = pin.nVertices - sizeA; - float32* xB = new float32[sizeB]; - float32* yB = new float32[sizeB]; - for (int32 i=0; i<sizeB; ++i){ - int32 ind = remainder(pinchIndexB+i,pin.nVertices); - xB[i] = pin.x[ind]; - yB[i] = pin.y[ind]; - } - b2Polygon tempB(xB,yB,sizeB); - poutB.Set(tempB); - //printf("Size of a: %d, size of b: %d\n",sizeA,sizeB); - delete[] xB; - delete[] yB; - } - return hasPinchPoint; -} - - /** - * Triangulates a polygon using simple ear-clipping algorithm. Returns - * size of Triangle array unless the polygon can't be triangulated. - * This should only happen if the polygon self-intersects, - * though it will not _always_ return null for a bad polygon - it is the - * caller's responsibility to check for self-intersection, and if it - * doesn't, it should at least check that the return value is non-null - * before using. You're warned! - * - * Triangles may be degenerate, especially if you have identical points - * in the input to the algorithm. Check this before you use them. - * - * This is totally unoptimized, so for large polygons it should not be part - * of the simulation loop. - * - * Returns: - * -1 if algorithm fails (self-intersection most likely) - * 0 if there are not enough vertices to triangulate anything. - * Number of triangles if triangulation was successful. - * - * results will be filled with results - ear clipping always creates vNum - 2 - * or fewer (due to pinch point polygon snipping), so allocate an array of - * this size. - */ - -int32 TriangulatePolygon(float32* xv, float32* yv, int32 vNum, b2Triangle* results) { - if (vNum < 3) - return 0; - - //Recurse and split on pinch points - b2Polygon pA,pB; - b2Polygon pin(xv,yv,vNum); - if (ResolvePinchPoint(pin,pA,pB)){ - b2Triangle* mergeA = new b2Triangle[pA.nVertices]; - b2Triangle* mergeB = new b2Triangle[pB.nVertices]; - int32 nA = TriangulatePolygon(pA.x,pA.y,pA.nVertices,mergeA); - int32 nB = TriangulatePolygon(pB.x,pB.y,pB.nVertices,mergeB); - if (nA==-1 || nB==-1){ - delete[] mergeA; - delete[] mergeB; - return -1; - } - for (int32 i=0; i<nA; ++i){ - results[i].Set(mergeA[i]); - } - for (int32 i=0; i<nB; ++i){ - results[nA+i].Set(mergeB[i]); - } - delete[] mergeA; - delete[] mergeB; - return (nA+nB); - } - - b2Triangle* buffer = new b2Triangle[vNum-2]; - int32 bufferSize = 0; - float32* xrem = new float32[vNum]; - float32* yrem = new float32[vNum]; - for (int32 i = 0; i < vNum; ++i) { - xrem[i] = xv[i]; - yrem[i] = yv[i]; - } - - int xremLength = vNum; - - while (vNum > 3) { - // Find an ear - int32 earIndex = -1; - //float32 earVolume = -1.0f; - float32 earMaxMinCross = -10.0f; - for (int32 i = 0; i < vNum; ++i) { - if (IsEar(i, xrem, yrem, vNum)) { - int32 lower = remainder(i-1,vNum); - int32 upper = remainder(i+1,vNum); - b2Vec2 d1(xrem[upper]-xrem[i],yrem[upper]-yrem[i]); - b2Vec2 d2(xrem[i]-xrem[lower],yrem[i]-yrem[lower]); - b2Vec2 d3(xrem[lower]-xrem[upper],yrem[lower]-yrem[upper]); - - d1.Normalize(); - d2.Normalize(); - d3.Normalize(); - float32 cross12 = b2Abs( b2Cross(d1,d2) ); - float32 cross23 = b2Abs( b2Cross(d2,d3) ); - float32 cross31 = b2Abs( b2Cross(d3,d1) ); - //Find the maximum minimum angle - float32 minCross = b2Min(cross12, b2Min(cross23,cross31)); - if (minCross > earMaxMinCross){ - earIndex = i; - earMaxMinCross = minCross; - } - - /*//This bit chooses the ear with greatest volume first - float32 testVol = b2Abs( d1.x*d2.y-d2.x*d1.y ); - if (testVol > earVolume){ - earIndex = i; - earVolume = testVol; - }*/ - } - } - - // If we still haven't found an ear, we're screwed. - // Note: sometimes this is happening because the - // remaining points are collinear. Really these - // should just be thrown out without halting triangulation. - if (earIndex == -1){ - if (B2_POLYGON_REPORT_ERRORS){ - b2Polygon dump(xrem,yrem,vNum); - printf("Couldn't find an ear, dumping remaining poly:\n"); - dump.printFormatted(); - printf("Please submit this dump to ewjordan at Box2d forums\n"); - } - for (int32 i = 0; i < bufferSize; i++) { - results[i].Set(buffer[i]); - } - - delete[] buffer; - - if (bufferSize > 0) return bufferSize; - else return -1; - } - - // Clip off the ear: - // - remove the ear tip from the list - - --vNum; - float32* newx = new float32[vNum]; - float32* newy = new float32[vNum]; - int32 currDest = 0; - for (int32 i = 0; i < vNum; ++i) { - if (currDest == earIndex) ++currDest; - newx[i] = xrem[currDest]; - newy[i] = yrem[currDest]; - ++currDest; - } - - // - add the clipped triangle to the triangle list - int32 under = (earIndex == 0) ? (vNum) : (earIndex - 1); - int32 over = (earIndex == vNum) ? 0 : (earIndex + 1); - b2Triangle toAdd = b2Triangle(xrem[earIndex], yrem[earIndex], xrem[over], yrem[over], xrem[under], yrem[under]); - buffer[bufferSize].Set(toAdd); - ++bufferSize; - - // - replace the old list with the new one - delete[] xrem; - delete[] yrem; - xrem = newx; - yrem = newy; - } - - b2Triangle toAdd = b2Triangle(xrem[1], yrem[1], xrem[2], yrem[2], - xrem[0], yrem[0]); - buffer[bufferSize].Set(toAdd); - ++bufferSize; - - delete[] xrem; - delete[] yrem; - - b2Assert(bufferSize == xremLength-2); - - for (int32 i = 0; i < bufferSize; i++) { - results[i].Set(buffer[i]); - } - - delete[] buffer; - - return bufferSize; -} - - /** - * Turns a list of triangles into a list of convex polygons. Very simple - * method - start with a seed triangle, keep adding triangles to it until - * you can't add any more without making the polygon non-convex. - * - * Returns an integer telling how many polygons were created. Will fill - * polys array up to polysLength entries, which may be smaller or larger - * than the return value. - * - * Takes O(N*P) where P is the number of resultant polygons, N is triangle - * count. - * - * The final polygon list will not necessarily be minimal, though in - * practice it works fairly well. - */ -int32 PolygonizeTriangles(b2Triangle* triangulated, int32 triangulatedLength, b2Polygon* polys, int32 polysLength) { - int32 polyIndex = 0; - - if (triangulatedLength <= 0) { - return 0; - } - else { - int* covered = new int[triangulatedLength]; - for (int32 i = 0; i < triangulatedLength; ++i) { - covered[i] = 0; - //Check here for degenerate triangles - if ( ( (triangulated[i].x[0] == triangulated[i].x[1]) && (triangulated[i].y[0] == triangulated[i].y[1]) ) - || ( (triangulated[i].x[1] == triangulated[i].x[2]) && (triangulated[i].y[1] == triangulated[i].y[2]) ) - || ( (triangulated[i].x[0] == triangulated[i].x[2]) && (triangulated[i].y[0] == triangulated[i].y[2]) ) ) { - covered[i] = 1; - } - } - - bool notDone = true; - while (notDone) { - int32 currTri = -1; - for (int32 i = 0; i < triangulatedLength; ++i) { - if (covered[i]) - continue; - currTri = i; - break; - } - if (currTri == -1) { - notDone = false; - } - else { - b2Polygon poly(triangulated[currTri]); - covered[currTri] = 1; - int32 index = 0; - for (int32 i = 0; i < 2*triangulatedLength; ++i,++index) { - while (index >= triangulatedLength) index -= triangulatedLength; - if (covered[index]) { - continue; - } - b2Polygon* newP = poly.Add(triangulated[index]); - if (!newP) { - continue; - } - if (newP->nVertices > b2Polygon::maxVerticesPerPolygon) { - delete newP; - newP = NULL; - continue; - } - if (newP->IsConvex()) { //Or should it be IsUsable? Maybe re-write IsConvex to apply the angle threshold from Box2d - poly.Set(*newP); - delete newP; - newP = NULL; - covered[index] = 1; - } else { - delete newP; - newP = NULL; - } - } - if (polyIndex < polysLength){ - poly.MergeParallelEdges(b2_angularSlop); - //If identical points are present, a triangle gets - //borked by the MergeParallelEdges function, hence - //the vertex number check - if (poly.nVertices >= 3) polys[polyIndex].Set(poly); - //else printf("Skipping corrupt poly\n"); - } - if (poly.nVertices >= 3) polyIndex++; //Must be outside (polyIndex < polysLength) test - } - //printf("MEMCHECK: %d\n",_CrtCheckMemory()); - } - delete[] covered; - } - return polyIndex; -} - - /** - * Checks if vertex i is the tip of an ear in polygon defined by xv[] and - * yv[]. - * - * Assumes clockwise orientation of polygon...ick - */ -bool IsEar(int32 i, float32* xv, float32* yv, int32 xvLength) { - float32 dx0, dy0, dx1, dy1; - dx0 = dy0 = dx1 = dy1 = 0; - if (i >= xvLength || i < 0 || xvLength < 3) { - return false; - } - int32 upper = i + 1; - int32 lower = i - 1; - if (i == 0) { - dx0 = xv[0] - xv[xvLength - 1]; - dy0 = yv[0] - yv[xvLength - 1]; - dx1 = xv[1] - xv[0]; - dy1 = yv[1] - yv[0]; - lower = xvLength - 1; - } - else if (i == xvLength - 1) { - dx0 = xv[i] - xv[i - 1]; - dy0 = yv[i] - yv[i - 1]; - dx1 = xv[0] - xv[i]; - dy1 = yv[0] - yv[i]; - upper = 0; - } - else { - dx0 = xv[i] - xv[i - 1]; - dy0 = yv[i] - yv[i - 1]; - dx1 = xv[i + 1] - xv[i]; - dy1 = yv[i + 1] - yv[i]; - } - float32 cross = dx0 * dy1 - dx1 * dy0; - if (cross > 0) - return false; - b2Triangle myTri(xv[i], yv[i], xv[upper], yv[upper], - xv[lower], yv[lower]); - for (int32 j = 0; j < xvLength; ++j) { - if (j == i || j == lower || j == upper) - continue; - if (myTri.IsInside(xv[j], yv[j])) - return false; - } - return true; -} - -void ReversePolygon(b2Polygon& p){ - ReversePolygon(p.x,p.y,p.nVertices); -} - -void ReversePolygon(float* x, float* y, int n) { - if (n == 1) - return; - int32 low = 0; - int32 high = n - 1; - while (low < high) { - float32 buffer = x[low]; - x[low] = x[high]; - x[high] = buffer; - buffer = y[low]; - y[low] = y[high]; - y[high] = buffer; - ++low; - --high; - } -} - - /** - * Decomposes a non-convex polygon into a number of convex polygons, up - * to maxPolys (remaining pieces are thrown out, but the total number - * is returned, so the return value can be greater than maxPolys). - * - * Each resulting polygon will have no more than maxVerticesPerPolygon - * vertices (set to b2MaxPolyVertices by default, though you can change - * this). - * - * Returns -1 if operation fails (usually due to self-intersection of - * polygon). - */ -int32 DecomposeConvex(b2Polygon* p, b2Polygon* results, int32 maxPolys) { - if (p->nVertices < 3) return 0; - - b2Triangle* triangulated = new b2Triangle[p->nVertices - 2]; - int32 nTri; - if (p->IsCCW()) { - //printf("It is ccw \n"); - b2Polygon tempP; - tempP.Set(*p); - ReversePolygon(tempP.x, tempP.y, tempP.nVertices); - nTri = TriangulatePolygon(tempP.x, tempP.y, tempP.nVertices, triangulated); - //ReversePolygon(p->x, p->y, p->nVertices); //reset orientation - } else { - //printf("It is not ccw \n"); - nTri = TriangulatePolygon(p->x, p->y, p->nVertices, triangulated); - } - if (nTri < 1) { - //Still no luck? Oh well... - delete[] triangulated; - return -1; - } - int32 nPolys = PolygonizeTriangles(triangulated, nTri, results, maxPolys); - delete[] triangulated; - return nPolys; -} - - /** - * Decomposes a polygon into convex polygons and adds all pieces to a b2BodyDef - * using a prototype b2PolyDef. All fields of the prototype are used for every - * shape except the vertices (friction, restitution, density, etc). - * - * If you want finer control, you'll have to add everything by hand. - * - * This is the simplest method to add a complicated polygon to a body. - * - * Until Box2D's b2BodyDef behavior changes, this method returns a pointer to - * a heap-allocated array of b2PolyDefs, which must be deleted by the user - * after the b2BodyDef is added to the world. - */ -#if 0 -void DecomposeConvexAndAddTo(b2Polygon* p, b2Body* bd, b2FixtureDef* prototype) { - - if (p->nVertices < 3) return; - b2Polygon* decomposed = new b2Polygon[p->nVertices - 2]; //maximum number of polys - int32 nPolys = DecomposeConvex(p, decomposed, p->nVertices - 2); - //printf("npolys: %d",nPolys); - b2FixtureDef* pdarray = new b2FixtureDef[2*p->nVertices];//extra space in case of splits - int32 extra = 0; - for (int32 i = 0; i < nPolys; ++i) { - b2FixtureDef* toAdd = &pdarray[i+extra]; - *toAdd = *prototype; - //Hmm, shouldn't have to do all this... - /* - toAdd->type = prototype->type; - toAdd->friction = prototype->friction; - toAdd->restitution = prototype->restitution; - toAdd->density = prototype->density; - toAdd->userData = prototype->userData; - toAdd->categoryBits = prototype->categoryBits; - toAdd->maskBits = prototype->maskBits; - toAdd->groupIndex = prototype->groupIndex;//*/ - //decomposed[i].print(); - b2Polygon curr = decomposed[i]; - //TODO ewjordan: move this triangle handling to a better place so that - //it happens even if this convenience function is not called. - if (curr.nVertices == 3){ - //Check here for near-parallel edges, since we can't - //handle this in merge routine - for (int j=0; j<3; ++j){ - int32 lower = (j == 0) ? (curr.nVertices - 1) : (j - 1); - int32 middle = j; - int32 upper = (j == curr.nVertices - 1) ? (0) : (j + 1); - float32 dx0 = curr.x[middle] - curr.x[lower]; float32 dy0 = curr.y[middle] - curr.y[lower]; - float32 dx1 = curr.x[upper] - curr.x[middle]; float32 dy1 = curr.y[upper] - curr.y[middle]; - float32 norm0 = sqrtf(dx0*dx0+dy0*dy0); float32 norm1 = sqrtf(dx1*dx1+dy1*dy1); - if ( !(norm0 > 0.0f && norm1 > 0.0f) ) { - //Identical points, don't do anything! - goto Skip; - } - dx0 /= norm0; dy0 /= norm0; - dx1 /= norm1; dy1 /= norm1; - float32 cross = dx0 * dy1 - dx1 * dy0; - float32 dot = dx0*dx1 + dy0*dy1; - if (fabs(cross) < b2_angularSlop && dot > 0) { - //Angle too close, split the triangle across from this point. - //This is guaranteed to result in two triangles that satify - //the tolerance (one of the angles is 90 degrees) - float32 dx2 = curr.x[lower] - curr.x[upper]; float32 dy2 = curr.y[lower] - curr.y[upper]; - float32 norm2 = sqrtf(dx2*dx2+dy2*dy2); - if (norm2 == 0.0f) { - goto Skip; - } - dx2 /= norm2; dy2 /= norm2; - float32 thisArea = curr.GetArea(); - float32 thisHeight = 2.0f * thisArea / norm2; - float32 buffer2 = dx2; - dx2 = dy2; dy2 = -buffer2; - //Make two new polygons - //printf("dx2: %f, dy2: %f, thisHeight: %f, middle: %d\n",dx2,dy2,thisHeight,middle); - float32 newX1[3] = { curr.x[middle]+dx2*thisHeight, curr.x[lower], curr.x[middle] }; - float32 newY1[3] = { curr.y[middle]+dy2*thisHeight, curr.y[lower], curr.y[middle] }; - float32 newX2[3] = { newX1[0], curr.x[middle], curr.x[upper] }; - float32 newY2[3] = { newY1[0], curr.y[middle], curr.y[upper] }; - b2Polygon p1(newX1,newY1,3); - b2Polygon p2(newX2,newY2,3); - if (p1.IsUsable()){ - p1.AddTo(*toAdd); - - - bd->CreateFixture(toAdd); - ++extra; - } else if (B2_POLYGON_REPORT_ERRORS){ - printf("Didn't add unusable polygon. Dumping vertices:\n"); - p1.print(); - } - if (p2.IsUsable()){ - p2.AddTo(pdarray[i+extra]); - - bd->CreateFixture(toAdd); - } else if (B2_POLYGON_REPORT_ERRORS){ - printf("Didn't add unusable polygon. Dumping vertices:\n"); - p2.print(); - } - goto Skip; - } - } - - } - if (decomposed[i].IsUsable()){ - decomposed[i].AddTo(*toAdd); - - bd->CreateFixture((const b2FixtureDef*)toAdd); - } else if (B2_POLYGON_REPORT_ERRORS){ - printf("Didn't add unusable polygon. Dumping vertices:\n"); - decomposed[i].print(); - } -Skip: - ; - } - delete[] pdarray; - delete[] decomposed; - return;// pdarray; //needs to be deleted after body is created -} - -#endif - /** - * Find the convex hull of a point cloud using "Gift-wrap" algorithm - start - * with an extremal point, and walk around the outside edge by testing - * angles. - * - * Runs in O(N*S) time where S is number of sides of resulting polygon. - * Worst case: point cloud is all vertices of convex polygon -> O(N^2). - * - * There may be faster algorithms to do this, should you need one - - * this is just the simplest. You can get O(N log N) expected time if you - * try, I think, and O(N) if you restrict inputs to simple polygons. - * - * Returns null if number of vertices passed is less than 3. - * - * Results should be passed through convex decomposition afterwards - * to ensure that each shape has few enough points to be used in Box2d. - * - * FIXME?: May be buggy with colinear points on hull. Couldn't find a test - * case that resulted in wrong behavior. If one turns up, the solution is to - * supplement angle check with an equality resolver that always picks the - * longer edge. I think the current solution is working, though it sometimes - * creates an extra edge along a line. - */ - -b2Polygon ConvexHull(b2Vec2* v, int nVert) { - float32* cloudX = new float32[nVert]; - float32* cloudY = new float32[nVert]; - for (int32 i = 0; i < nVert; ++i) { - cloudX[i] = v[i].x; - cloudY[i] = v[i].y; - } - b2Polygon result = ConvexHull(cloudX, cloudY, nVert); - delete[] cloudX; - delete[] cloudY; - return result; -} - -b2Polygon ConvexHull(float32* cloudX, float32* cloudY, int32 nVert) { - b2Assert(nVert > 2); - int32* edgeList = new int32[nVert]; - int32 numEdges = 0; - - float32 minY = 1e10; - int32 minYIndex = nVert; - for (int32 i = 0; i < nVert; ++i) { - if (cloudY[i] < minY) { - minY = cloudY[i]; - minYIndex = i; - } - } - - int32 startIndex = minYIndex; - int32 winIndex = -1; - float32 dx = -1.0f; - float32 dy = 0.0f; - while (winIndex != minYIndex) { - float32 newdx = 0.0f; - float32 newdy = 0.0f; - float32 maxDot = -2.0f; - for (int32 i = 0; i < nVert; ++i) { - if (i == startIndex) - continue; - newdx = cloudX[i] - cloudX[startIndex]; - newdy = cloudY[i] - cloudY[startIndex]; - float32 nrm = sqrtf(newdx * newdx + newdy * newdy); - nrm = (nrm == 0.0f) ? 1.0f : nrm; - newdx /= nrm; - newdy /= nrm; - - //Cross and dot products act as proxy for angle - //without requiring inverse trig. - //FIXED: don't need cross test - //float32 newCross = newdx * dy - newdy * dx; - float32 newDot = newdx * dx + newdy * dy; - if (newDot > maxDot) {//newCross >= 0.0f && newDot > maxDot) { - maxDot = newDot; - winIndex = i; - } - } - edgeList[numEdges++] = winIndex; - dx = cloudX[winIndex] - cloudX[startIndex]; - dy = cloudY[winIndex] - cloudY[startIndex]; - float32 nrm = sqrtf(dx * dx + dy * dy); - nrm = (nrm == 0.0f) ? 1.0f : nrm; - dx /= nrm; - dy /= nrm; - startIndex = winIndex; - } - - float32* xres = new float32[numEdges]; - float32* yres = new float32[numEdges]; - for (int32 i = 0; i < numEdges; i++) { - xres[i] = cloudX[edgeList[i]]; - yres[i] = cloudY[edgeList[i]]; - //("%f, %f\n",xres[i],yres[i]); - } - - b2Polygon returnVal(xres, yres, numEdges); - - delete[] xres; - delete[] yres; - delete[] edgeList; - returnVal.MergeParallelEdges(b2_angularSlop); - return returnVal; -} - - -/* - * Given sines and cosines, tells if A's angle is less than B's on -Pi, Pi - * (in other words, is A "righter" than B) - */ -bool IsRighter(float32 sinA, float32 cosA, float32 sinB, float32 cosB){ - if (sinA < 0){ - if (sinB > 0 || cosA <= cosB) return true; - else return false; - } else { - if (sinB < 0 || cosA <= cosB) return false; - else return true; - } -} - -//Fix for obnoxious behavior for the % operator for negative numbers... -int32 remainder(int32 x, int32 modulus){ - int32 rem = x % modulus; - while (rem < 0){ - rem += modulus; - } - return rem; -} - -/* -Method: -Start at vertex with minimum y (pick maximum x one if there are two). -We aim our "lastDir" vector at (1.0, 0) -We look at the two rays going off from our start vertex, and follow whichever -has the smallest angle (in -Pi -> Pi) wrt lastDir ("rightest" turn) - -Loop until we hit starting vertex: - -We add our current vertex to the list. -We check the seg from current vertex to next vertex for intersections - - if no intersections, follow to next vertex and continue - - if intersections, pick one with minimum distance - - if more than one, pick one with "rightest" next point (two possibilities for each) - -*/ - -b2Polygon TraceEdge(b2Polygon* p){ - b2PolyNode* nodes = new b2PolyNode[p->nVertices*p->nVertices];//overkill, but sufficient (order of mag. is right) - int32 nNodes = 0; - - //Add base nodes (raw outline) - for (int32 i=0; i < p->nVertices; ++i){ - b2Vec2 pos(p->x[i],p->y[i]); - nodes[i].position = pos; - ++nNodes; - int32 iplus = (i==p->nVertices-1)?0:i+1; - int32 iminus = (i==0)?p->nVertices-1:i-1; - nodes[i].AddConnection(nodes[iplus]); - nodes[i].AddConnection(nodes[iminus]); - } - - //Process intersection nodes - horribly inefficient - bool dirty = true; - int counter = 0; - while (dirty){ - dirty = false; - for (int32 i=0; i < nNodes; ++i){ - for (int32 j=0; j < nodes[i].nConnected; ++j){ - for (int32 k=0; k < nNodes; ++k){ - if (k==i || &nodes[k] == nodes[i].connected[j]) continue; - for (int32 l=0; l < nodes[k].nConnected; ++l){ - - if ( nodes[k].connected[l] == nodes[i].connected[j] || - nodes[k].connected[l] == &nodes[i]) continue; - //Check intersection - b2Vec2 intersectPt; - //if (counter > 100) printf("checking intersection: %d, %d, %d, %d\n",i,j,k,l); - bool crosses = intersect(nodes[i].position,nodes[i].connected[j]->position, - nodes[k].position,nodes[k].connected[l]->position, - intersectPt); - if (crosses){ - /*if (counter > 100) { - printf("Found crossing at %f, %f\n",intersectPt.x, intersectPt.y); - printf("Locations: %f,%f - %f,%f | %f,%f - %f,%f\n", - nodes[i].position.x, nodes[i].position.y, - nodes[i].connected[j]->position.x, nodes[i].connected[j]->position.y, - nodes[k].position.x,nodes[k].position.y, - nodes[k].connected[l]->position.x,nodes[k].connected[l]->position.y); - printf("Memory addresses: %d, %d, %d, %d\n",(int)&nodes[i],(int)nodes[i].connected[j],(int)&nodes[k],(int)nodes[k].connected[l]); - }*/ - dirty = true; - //Destroy and re-hook connections at crossing point - b2PolyNode* connj = nodes[i].connected[j]; - b2PolyNode* connl = nodes[k].connected[l]; - nodes[i].connected[j]->RemoveConnection(nodes[i]); - nodes[i].RemoveConnection(*connj); - nodes[k].connected[l]->RemoveConnection(nodes[k]); - nodes[k].RemoveConnection(*connl); - nodes[nNodes] = b2PolyNode(intersectPt); - nodes[nNodes].AddConnection(nodes[i]); - nodes[i].AddConnection(nodes[nNodes]); - nodes[nNodes].AddConnection(nodes[k]); - nodes[k].AddConnection(nodes[nNodes]); - nodes[nNodes].AddConnection(*connj); - connj->AddConnection(nodes[nNodes]); - nodes[nNodes].AddConnection(*connl); - connl->AddConnection(nodes[nNodes]); - ++nNodes; - goto SkipOut; - } - } - } - } - } - SkipOut: - ++counter; - //if (counter > 100) printf("Counter: %d\n",counter); - } - - /* - // Debugging: check for connection consistency - for (int32 i=0; i<nNodes; ++i) { - int32 nConn = nodes[i].nConnected; - for (int32 j=0; j<nConn; ++j) { - if (nodes[i].connected[j]->nConnected == 0) b2Assert(false); - b2PolyNode* connect = nodes[i].connected[j]; - bool found = false; - for (int32 k=0; k<connect->nConnected; ++k) { - if (connect->connected[k] == &nodes[i]) found = true; - } - b2Assert(found); - } - }*/ - - //Collapse duplicate points - bool foundDupe = true; - int nActive = nNodes; - while (foundDupe){ - foundDupe = false; - for (int32 i=0; i < nNodes; ++i){ - if (nodes[i].nConnected == 0) continue; - for (int32 j=i+1; j < nNodes; ++j){ - if (nodes[j].nConnected == 0) continue; - b2Vec2 diff = nodes[i].position - nodes[j].position; - if (diff.LengthSquared() <= COLLAPSE_DIST_SQR){ - if (nActive <= 3) { - // -- GODOT start -- - delete[] nodes; - // -- GODOT end -- - return b2Polygon(); - } - //printf("Found dupe, %d left\n",nActive); - --nActive; - foundDupe = true; - b2PolyNode* inode = &nodes[i]; - b2PolyNode* jnode = &nodes[j]; - //Move all of j's connections to i, and orphan j - int32 njConn = jnode->nConnected; - for (int32 k=0; k < njConn; ++k){ - b2PolyNode* knode = jnode->connected[k]; - b2Assert(knode != jnode); - if (knode != inode) { - inode->AddConnection(*knode); - knode->AddConnection(*inode); - } - knode->RemoveConnection(*jnode); - //printf("knode %d on node %d now has %d connections\n",k,j,knode->nConnected); - //printf("Found duplicate point.\n"); - } - /* - printf("Orphaning node at address %d\n",(int)jnode); - for (int32 k=0; k<njConn; ++k) { - if (jnode->connected[k]->IsConnectedTo(*jnode)) printf("Problem!!!\n"); - } - for (int32 k=0; k < njConn; ++k){ - jnode->RemoveConnectionByIndex(k); - } - */ - jnode->nConnected = 0; - } - } - } - } - - /* - // Debugging: check for connection consistency - for (int32 i=0; i<nNodes; ++i) { - int32 nConn = nodes[i].nConnected; - printf("Node %d has %d connections\n",i,nConn); - for (int32 j=0; j<nConn; ++j) { - if (nodes[i].connected[j]->nConnected == 0) { - printf("Problem with node %d connection at address %d\n",i,(int)(nodes[i].connected[j])); - b2Assert(false); - } - b2PolyNode* connect = nodes[i].connected[j]; - bool found = false; - for (int32 k=0; k<connect->nConnected; ++k) { - if (connect->connected[k] == &nodes[i]) found = true; - } - if (!found) printf("Connection %d (of %d) on node %d (of %d) did not have reciprocal connection.\n",j,nConn,i,nNodes); - b2Assert(found); - } - }//*/ - - //Now walk the edge of the list - - //Find node with minimum y value (max x if equal) - float32 minY = 1e10; - float32 maxX = -1e10; - int32 minYIndex = -1; - for (int32 i = 0; i < nNodes; ++i) { - if (nodes[i].position.y < minY && nodes[i].nConnected > 1) { - minY = nodes[i].position.y; - minYIndex = i; - maxX = nodes[i].position.x; - } else if (nodes[i].position.y == minY && nodes[i].position.x > maxX && nodes[i].nConnected > 1) { - minYIndex = i; - maxX = nodes[i].position.x; - } - } - - b2Vec2 origDir(1.0f,0.0f); - b2Vec2* resultVecs = new b2Vec2[4*nNodes];// nodes may be visited more than once, unfortunately - change to growable array! - int32 nResultVecs = 0; - b2PolyNode* currentNode = &nodes[minYIndex]; - b2PolyNode* startNode = currentNode; - b2Assert(currentNode->nConnected > 0); - b2PolyNode* nextNode = currentNode->GetRightestConnection(origDir); - if (!nextNode) goto CleanUp; // Borked, clean up our mess and return - resultVecs[0] = startNode->position; - ++nResultVecs; - while (nextNode != startNode){ - if (nResultVecs > 4*nNodes){ - /* - printf("%d, %d, %d\n",(int)startNode,(int)currentNode,(int)nextNode); - printf("%f, %f -> %f, %f\n",currentNode->position.x,currentNode->position.y, nextNode->position.x, nextNode->position.y); - p->printFormatted(); - printf("Dumping connection graph: \n"); - for (int32 i=0; i<nNodes; ++i) { - printf("nodex[%d] = %f; nodey[%d] = %f;\n",i,nodes[i].position.x,i,nodes[i].position.y); - printf("//connected to\n"); - for (int32 j=0; j<nodes[i].nConnected; ++j) { - printf("connx[%d][%d] = %f; conny[%d][%d] = %f;\n",i,j,nodes[i].connected[j]->position.x, i,j,nodes[i].connected[j]->position.y); - } - } - printf("Dumping results thus far: \n"); - for (int32 i=0; i<nResultVecs; ++i) { - printf("x[%d]=map(%f,-3,3,0,width); y[%d] = map(%f,-3,3,height,0);\n",i,resultVecs[i].x,i,resultVecs[i].y); - } - //*/ - b2Assert(false); //nodes should never be visited four times apiece (proof?), so we've probably hit a loop...crap - } - resultVecs[nResultVecs++] = nextNode->position; - b2PolyNode* oldNode = currentNode; - currentNode = nextNode; - //printf("Old node connections = %d; address %d\n",oldNode->nConnected, (int)oldNode); - //printf("Current node connections = %d; address %d\n",currentNode->nConnected, (int)currentNode); - nextNode = currentNode->GetRightestConnection(oldNode); - if (!nextNode) goto CleanUp; // There was a problem, so jump out of the loop and use whatever garbage we've generated so far - //printf("nextNode address: %d\n",(int)nextNode); - } - - CleanUp: - - float32* xres = new float32[nResultVecs]; - float32* yres = new float32[nResultVecs]; - for (int32 i=0; i<nResultVecs; ++i){ - xres[i] = resultVecs[i].x; - yres[i] = resultVecs[i].y; - } - b2Polygon retval(xres,yres,nResultVecs); - delete[] resultVecs; - delete[] yres; - delete[] xres; - delete[] nodes; - return retval; -} - -b2PolyNode::b2PolyNode(){ - nConnected = 0; - visited = false; -} -b2PolyNode::b2PolyNode(b2Vec2& pos){ - position = pos; - nConnected = 0; - visited = false; -} - -void b2PolyNode::AddConnection(b2PolyNode& toMe){ - b2Assert(nConnected < MAX_CONNECTED); - // Ignore duplicate additions - for (int32 i=0; i<nConnected; ++i) { - if (connected[i] == &toMe) return; - } - connected[nConnected] = &toMe; - ++nConnected; -} - -void b2PolyNode::RemoveConnection(b2PolyNode& fromMe){ - bool isFound = false; - int32 foundIndex = -1; - for (int32 i=0; i<nConnected; ++i){ - if (&fromMe == connected[i]) {//.position == connected[i]->position){ - isFound = true; - foundIndex = i; - break; - } - } - b2Assert(isFound); - --nConnected; - //printf("nConnected: %d\n",nConnected); - for (int32 i=foundIndex; i < nConnected; ++i){ - connected[i] = connected[i+1]; - } -} -void b2PolyNode::RemoveConnectionByIndex(int32 index){ - --nConnected; - //printf("New nConnected = %d\n",nConnected); - for (int32 i=index; i < nConnected; ++i){ - connected[i] = connected[i+1]; - } -} -bool b2PolyNode::IsConnectedTo(b2PolyNode& me){ - bool isFound = false; - for (int32 i=0; i<nConnected; ++i){ - if (&me == connected[i]) {//.position == connected[i]->position){ - isFound = true; - break; - } - } - return isFound; -} -b2PolyNode* b2PolyNode::GetRightestConnection(b2PolyNode* incoming){ - if (nConnected == 0) b2Assert(false); // This means the connection graph is inconsistent - if (nConnected == 1) { - //b2Assert(false); - // Because of the possibility of collapsing nearby points, - // we may end up with "spider legs" dangling off of a region. - // The correct behavior here is to turn around. - return incoming; - } - b2Vec2 inDir = position - incoming->position; - float32 inLength = inDir.Normalize(); - b2Assert(inLength > CMP_EPSILON); - - b2PolyNode* result = NULL; - for (int32 i=0; i<nConnected; ++i){ - if (connected[i] == incoming) continue; - b2Vec2 testDir = connected[i]->position - position; - float32 testLengthSqr = testDir.LengthSquared(); - testDir.Normalize(); - /* - if (testLengthSqr < COLLAPSE_DIST_SQR) { - printf("Problem with connection %d\n",i); - printf("This node has %d connections\n",nConnected); - printf("That one has %d\n",connected[i]->nConnected); - if (this == connected[i]) printf("This points at itself.\n"); - }*/ - b2Assert (testLengthSqr >= COLLAPSE_DIST_SQR); - float32 myCos = b2Dot(inDir,testDir); - float32 mySin = b2Cross(inDir,testDir); - if (result){ - b2Vec2 resultDir = result->position - position; - resultDir.Normalize(); - float32 resCos = b2Dot(inDir,resultDir); - float32 resSin = b2Cross(inDir,resultDir); - if (IsRighter(mySin,myCos,resSin,resCos)){ - result = connected[i]; - } - } else{ - result = connected[i]; - } - } - if (B2_POLYGON_REPORT_ERRORS && !result) { - printf("nConnected = %d\n",nConnected); - for (int32 i=0; i<nConnected; ++i) { - printf("connected[%d] @ %d\n",i,0);//(int)connected[i]); - } - } - b2Assert(result); - - return result; -} - -b2PolyNode* b2PolyNode::GetRightestConnection(b2Vec2& incomingDir){ - b2Vec2 diff = position-incomingDir; - b2PolyNode temp(diff); - b2PolyNode* res = GetRightestConnection(&temp); - b2Assert(res); - return res; -} -} diff --git a/thirdparty/b2d_convexdecomp/b2Polygon.h b/thirdparty/b2d_convexdecomp/b2Polygon.h deleted file mode 100644 index c466e28f7e..0000000000 --- a/thirdparty/b2d_convexdecomp/b2Polygon.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2007 Eric Jordan - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - -#ifndef B2_POLYGON_H -#define B2_POLYGON_H - -#include "b2Triangle.h" -#include "stdio.h" -#include <string.h> -#include <limits.h> -namespace b2ConvexDecomp { - -static bool B2_POLYGON_REPORT_ERRORS = false; - -class b2Polygon; - -int32 remainder(int32 x, int32 modulus); -int32 TriangulatePolygon(float32* xv, float32* yv, int32 vNum, b2Triangle* results); -bool IsEar(int32 i, float32* xv, float32* yv, int32 xvLength); //Not for external use -int32 PolygonizeTriangles(b2Triangle* triangulated, int32 triangulatedLength, b2Polygon* polys, int32 polysLength); -int32 DecomposeConvex(b2Polygon* p, b2Polygon* results, int32 maxPolys); -//void DecomposeConvexAndAddTo(b2Polygon* p, b2Body* bd, b2FixtureDef* prototype); - -void ReversePolygon(float32* x, float32* y, int n); - -b2Polygon TraceEdge(b2Polygon* p); //For use with self-intersecting polygons, finds outline - -class b2Polygon { - -public: - const static int32 maxVerticesPerPolygon = b2_maxPolygonVertices; - - float32* x; //vertex arrays - float32* y; - int32 nVertices; - - float32 area; - bool areaIsSet; - - b2Polygon(float32* _x, float32* _y, int32 nVert); - b2Polygon(b2Vec2* v, int32 nVert); - b2Polygon(); - ~b2Polygon(); - - float32 GetArea(); - - void MergeParallelEdges(float32 tolerance); - b2Vec2* GetVertexVecs(); - b2Polygon(b2Triangle& t); - void Set(const b2Polygon& p); - bool IsConvex(); - bool IsCCW(); - bool IsUsable(bool printError); - bool IsUsable(); - bool IsSimple(); - // void AddTo(b2FixtureDef& pd); - - b2Polygon* Add(b2Triangle& t); - - void print(){ - printFormatted(); - /* - for (int32 i=0; i<nVertices; ++i){ - printf("i: %d, x:%f, y:%f\n",i,x[i],y[i]); - } - */ - } - - void printFormatted(){ - printf("float xv[] = {"); - for (int32 i=0; i<nVertices; ++i){ - printf("%ff,",x[i]); - } - printf("};\nfloat yv[] = {"); - for (int32 i=0; i<nVertices; ++i){ - printf("%ff,",y[i]); - } - printf("};\n"); - } - - b2Polygon(const b2Polygon& p){ - nVertices = p.nVertices; - area = p.area; - areaIsSet = p.areaIsSet; - x = new float32[nVertices]; - y = new float32[nVertices]; - memcpy(x, p.x, nVertices * sizeof(float32)); - memcpy(y, p.y, nVertices * sizeof(float32)); - } - - -}; - -const int32 MAX_CONNECTED = 32; -const float32 COLLAPSE_DIST_SQR = CMP_EPSILON*CMP_EPSILON;//0.1f;//1000*CMP_EPSILON*1000*CMP_EPSILON; - -class b2PolyNode{ -public: - b2Vec2 position; - b2PolyNode* connected[MAX_CONNECTED]; - int32 nConnected; - bool visited; - - b2PolyNode(b2Vec2& pos); - b2PolyNode(); - void AddConnection(b2PolyNode& toMe); - void RemoveConnection(b2PolyNode& fromMe); - void RemoveConnectionByIndex(int32 index); - bool IsConnectedTo(b2PolyNode& me); - b2PolyNode* GetRightestConnection(b2PolyNode* incoming); - b2PolyNode* GetRightestConnection(b2Vec2& incomingDir); -}; - - -b2Polygon ConvexHull(b2Vec2* v, int nVert); -b2Polygon ConvexHull(float32* cloudX, float32* cloudY, int32 nVert); -} -#endif diff --git a/thirdparty/b2d_convexdecomp/b2Triangle.cpp b/thirdparty/b2d_convexdecomp/b2Triangle.cpp deleted file mode 100644 index a0a30b9407..0000000000 --- a/thirdparty/b2d_convexdecomp/b2Triangle.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2007 Eric Jordan - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - -#include "b2Triangle.h" - -namespace b2ConvexDecomp { - -//Constructor automatically fixes orientation to ccw -b2Triangle::b2Triangle(float32 x1, float32 y1, float32 x2, float32 y2, float32 x3, float32 y3){ - x = new float32[3]; - y = new float32[3]; - float32 dx1 = x2-x1; - float32 dx2 = x3-x1; - float32 dy1 = y2-y1; - float32 dy2 = y3-y1; - float32 cross = dx1*dy2-dx2*dy1; - bool ccw = (cross>0); - if (ccw){ - x[0] = x1; x[1] = x2; x[2] = x3; - y[0] = y1; y[1] = y2; y[2] = y3; - } else{ - x[0] = x1; x[1] = x3; x[2] = x2; - y[0] = y1; y[1] = y3; y[2] = y2; - } -} - -b2Triangle::b2Triangle(){ - x = new float32[3]; - y = new float32[3]; -} - -b2Triangle::~b2Triangle(){ - delete[] x; - delete[] y; -} - -void b2Triangle::Set(const b2Triangle& toMe) { - for (int32 i=0; i<3; ++i) { - x[i] = toMe.x[i]; - y[i] = toMe.y[i]; - } -} - -bool b2Triangle::IsInside(float32 _x, float32 _y){ - if (_x < x[0] && _x < x[1] && _x < x[2]) return false; - if (_x > x[0] && _x > x[1] && _x > x[2]) return false; - if (_y < y[0] && _y < y[1] && _y < y[2]) return false; - if (_y > y[0] && _y > y[1] && _y > y[2]) return false; - - float32 vx2 = _x-x[0]; float32 vy2 = _y-y[0]; - float32 vx1 = x[1]-x[0]; float32 vy1 = y[1]-y[0]; - float32 vx0 = x[2]-x[0]; float32 vy0 = y[2]-y[0]; - - float32 dot00 = vx0*vx0+vy0*vy0; - float32 dot01 = vx0*vx1+vy0*vy1; - float32 dot02 = vx0*vx2+vy0*vy2; - float32 dot11 = vx1*vx1+vy1*vy1; - float32 dot12 = vx1*vx2+vy1*vy2; - float32 invDenom = 1.0f / (dot00*dot11 - dot01*dot01); - float32 u = (dot11*dot02 - dot01*dot12)*invDenom; - float32 v = (dot00*dot12 - dot01*dot02)*invDenom; - - return ((u>=0)&&(v>=0)&&(u+v<=1)); -} - - -} diff --git a/thirdparty/b2d_convexdecomp/b2Triangle.h b/thirdparty/b2d_convexdecomp/b2Triangle.h deleted file mode 100644 index 99ab5cba69..0000000000 --- a/thirdparty/b2d_convexdecomp/b2Triangle.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2007 Eric Jordan - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - */ - -#ifndef B2_TRIANGLE_H -#define B2_TRIANGLE_H - -#include "b2Glue.h" - -namespace b2ConvexDecomp { - - - -class b2Triangle{ -public: - float* x; - float* y; - b2Triangle(); - b2Triangle(float32 x1, float32 y1, float32 x2, float32 y2, float32 x3, float32 y3); - ~b2Triangle(); - bool IsInside(float32 _x, float32 _y); - void Set(const b2Triangle& toMe); - -}; - -} -#endif diff --git a/thirdparty/vhacd/0004-fix-uwp-arm-build.patch b/thirdparty/vhacd/0004-fix-uwp-arm-build.patch new file mode 100644 index 0000000000..a5bba3fd7d --- /dev/null +++ b/thirdparty/vhacd/0004-fix-uwp-arm-build.patch @@ -0,0 +1,16 @@ +diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h +index 3999a71521..4c9e0cf7ab 100644 +--- a/thirdparty/vhacd/inc/btScalar.h ++++ b/thirdparty/vhacd/inc/btScalar.h +@@ -72,7 +72,10 @@ inline int32_t btGetVersion() + #define btFsel(a, b, c) __fsel((a), (b), (c)) + #else + +-#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) ++// -- GODOT start -- ++//#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) ++#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) && (!defined(_M_ARM)) ++// -- GODOT end -- + #define BT_USE_SSE + #include <emmintrin.h> + #endif diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h index 3999a71521..4c9e0cf7ab 100644 --- a/thirdparty/vhacd/inc/btScalar.h +++ b/thirdparty/vhacd/inc/btScalar.h @@ -72,7 +72,10 @@ inline int32_t btGetVersion() #define btFsel(a, b, c) __fsel((a), (b), (c)) #else -#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) +// -- GODOT start -- +//#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) +#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(BT_USE_DOUBLE_PRECISION)) && (!defined(_M_ARM)) +// -- GODOT end -- #define BT_USE_SSE #include <emmintrin.h> #endif |